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

Wyt*_*tze 6 event-handling page-init ios jquery-mobile cordova

我有一个Phonegap和jQuery Mobile应用程序,可以很好地在Android和Web上运行.在iOS上我得到了意想不到的结果,这似乎是由于我绑定大多数应用程序进程的处理程序的document.pageinit事件被触发了两次.

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

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

第一次发射时,闪屏仍在显示.此时,在使用XCode在MacBook Pro上进行测试时,控制台甚至无法使用:当我使用console.log时,上面的消息没有显示在控制台中.

第二次,jQueryMobile创建第一页后不久就发生了火灾.

造成这种双重射击的原因是什么?我该怎么做?

编辑:我后来注意到,pageinit不仅仅是第二次触发,而是每次我打开一个新的data-role ='page'div.请参阅下面的答案.

Wyt*_*tze 15

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

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

令人震惊的是,文档并没有在任何地方提到这一点:他们建议你使用它而不提及它将为每个后续页面触发.

我无法相信他们将这个有问题的例子定义为有效的等价物$(document).ready().

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