文档pageinit在iOS上触发不止一次(jQueryMobile)



我有一个电话间隙&jQuery移动应用程序,在Android和web上运行良好。在iOS上,我得到了意想不到的结果,这似乎是由于我为应用程序的大多数进程绑定处理程序的document.pageinit事件被触发了两次。

不,我没有绑两次。不,我没有使用document.ready。是的,我确实在脚本的早期将它绑定到了文档,而不是在任何其他函数中。

$(document).on('pageinit',function(event){
    alert(' Pageinit on document');
    //Some more code
})

它第一次启动时,启动屏幕仍在显示。在这一点上,当使用XCode在MacBook Pro上测试时,控制台甚至不可用:当我使用console.log时,控制台中没有显示上述消息。

第二次,在jQueryMobile创建第一个页面后不久,就会发生火灾。

是什么导致了这两次开火?我该怎么办?

编辑:我后来注意到pageinit不仅仅是第二次启动,而且每次我打开一个新的数据角色="page"div时都会启动。请参阅下面的答案。

我很欣赏Zoltans的回答,在某些情况下这可能是相关的,但这不是原因。

$(document).on('pageinit')将为jQuery Mobile应用程序中使用的每个页面转换触发。HTML链接和使用$.mobile.changePage();时都会发生这种情况。

令人震惊的是,这些文档在任何地方都没有提到这一点:他们建议你使用它,但没有提到它会在接下来的每一页中触发。

我不敢相信他们把这个有问题的例子框定为$(document).ready()的有效等价物。

他们应该建议您使用.one()而不是.bind()或on()进行绑定,以避免执行多个代码。

发生这种情况是因为我认为您将jquery和jquery mobile一起使用。但解决方案很简单。尝试

$(document:not(.processed)).addClass('processed').on('pageinit',function(event)

这应该可以解决

将正文编辑为<body data-role="page">应该可以解决问题。

我在这个问题上挣扎了太久,无法与他人分享。我认为这不仅是iOS下的问题,也是Android下的问题(在我的情况下,它导致了闪烁)。

每次发出请求时,都会调用两次"pageinit"事件。第一个是为提供的url获取数据的合适方法,另一个是在新页面加载到DOM(jQueryMobile页面动态注入文档)后调用的。我认为有更多的解决方案来解决这个问题,下面是我的:

$(document).ready(function(){
    $(this).delegate("#page-selector", "pageinit", function(ev, data){}); 
    // I don't know why the line has to be present, but otherwise does not work
});

我的HTML文档看起来像:

<html>
<head>...here goes scripts...</head>
<body>
   <div id="#page-selector"> <!-- just wrapper -->
       <div data-role="page">
        ... content...
       </div>
   </div>
</body>
</html>

我希望它能为他人腾出宝贵的时间!

相关内容

  • 没有找到相关文章

最新更新