我有一个电话间隙&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>
我希望它能为他人腾出宝贵的时间!