Javascript jQuery Mobile-$.Mobile.activePage.attr()在初始化时调用两次
我正试图在jquerymobile启动初始屏幕后构建重定向。我拥有的JavaScript代码:Javascript jQuery Mobile-$.Mobile.activePage.attr()在初始化时调用两次,javascript,jquery,jquery-mobile,Javascript,Jquery,Jquery Mobile,我正试图在jquerymobile启动初始屏幕后构建重定向。我拥有的JavaScript代码: $(window).on('pageshow', function() { if($.mobile.activePage.attr("id") === "intro"){ setTimeout(function() { console.log($.mobile.activePage.attr("id"));
$(window).on('pageshow', function() {
if($.mobile.activePage.attr("id") === "intro"){
setTimeout(function() {
console.log($.mobile.activePage.attr("id"));
$.mobile.changePage('pages/login.html');
}, 2000);
}
});
出于某种原因,当我第一次调用这个应用程序时,我得到了两个关于这个函数的调用,分别是
console.log($.mobile.activePage.attr(“id”)
输出当前页面的ID(视情况而定),第二次调用下一页的ID。我不知道为什么if子句的计算结果不是fales,代码又被调用了。ID设置正确,任何时候都不会重复。更令人惊讶的是,我构建的演示案例工作得很好:使用您发布的实现,pageshow事件触发两次,$.mobile.activePage.attr(“id”)
等于intro
,这意味着在这两次触发中intro
页面都处于活动状态
分析firebug上的事件表明,这两次火灾中事件的目标不同。事件的目标显示为事件注册的元素或其子代
在第一次触发时,事件的目标是div id=“intro”
元素。第二次触发时,事件的目标是div id=“intro”
的所有者文档(顶级文档对象)。但在这两个页面上,移动活动页面都是简介页面。这就是你面临这个问题的原因。如果使用event.target.id==“intro”
表达式执行检查,则If块中的代码将执行一次
通过以上分析,我认为您可以使用以下方法解决此问题:
$(window).on('pageshow', function(event) {
if(event.target.id === "intro"){
setTimeout(function() {
console.log($.mobile.activePage.attr("id"));
$.mobile.changePage('pages/login.html');
}, 2000);
}
})
或
试试这个$('#intro').off('pageshow').on('pageshow',function(){code})代码>感谢您的详细回答!你不仅帮助解决了我的问题,还向我展示了问题的起因,了解和理解这一点总是很棒的!有一个+1!
$( document ).on( "pageshow", "#intro", function( event, ui ) {
setTimeout(function() {
console.log($.mobile.activePage.attr("id"));
$.mobile.changePage('pages/login.html');
}, 2000);
});