0

我正在尝试在使用 jQuery Mobile 的初始启动启动画面之后构建重定向。我拥有的 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 在任何时候都不会重复。更令人惊讶的是,我构建的演示案例运行良好:http: //jsfiddle.net/AT5Fg/

4

1 回答 1

1

使用您发布的实现,pageshow 事件触发两次,$.mobile.activePage.attr("id")等于,intro这意味着在两次触发时intro页面都是活动的。

分析firebug上的事件表明,这两次火灾的事件目标是不同的。事件的目标显示为事件注册的元素或其后代。

在第一次触发时,事件的目标是div id = "intro"元素。在第二次触发时,事件的目标ownerDocumentdiv 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);
    }
})

或者

$( document ).on( "pageshow", "#intro", function( event, ui ) {
    setTimeout(function() {
        console.log($.mobile.activePage.attr("id"));
        $.mobile.changePage('pages/login.html');
    }, 2000);
});
于 2013-04-26T23:52:35.203 回答