Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery Mobile-$.Mobile.activePage.attr()在初始化时调用两次_Javascript_Jquery_Jquery Mobile - Fatal编程技术网

Javascript jQuery Mobile-$.Mobile.activePage.attr()在初始化时调用两次

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"));

我正试图在jquerymobile启动初始屏幕后构建重定向。我拥有的JavaScript代码:

$(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);
});