Jquery mobile 仅在新创建页面时运行,而不是从另一个页面返回时运行

Jquery mobile 仅在新创建页面时运行,而不是从另一个页面返回时运行,jquery-mobile,Jquery Mobile,关于与ajax加载一起使用的pagecreate事件,我不太理解 问题在于在多页来回转换上触发事件 // only on page a $(document).on("pagecreate", function (e) { alert('on pagecreate\n' + $(e.target).attr('id') ) }); // only on page a, ends // each page page a is <div data-role="page" id="pa

关于与ajax加载一起使用的
pagecreate
事件,我不太理解

问题在于在多页来回转换上触发事件

// only on page a
$(document).on("pagecreate", function (e) {
  alert('on pagecreate\n' +   $(e.target).attr('id') )
});
// only on page a, ends

// each page
page a is <div data-role="page" id="page-a">
page b is <div data-role="page" id="page-b">
page c is <div data-role="page" id="page-c">

奇怪? v) 奇怪的是:为什么r)不警觉,而v)警觉

w) 更奇怪的是:为什么v)发出警报,而w)没有


问题是——如何做到以下几点? 也就是说,仅当新创建页面时才发出警报。返回从不发出警报。

更新
如果只想在前向导航中运行代码,请收听
pagecontainerbeforechange
pagecontainerbeforechange
并从
选项
对象检索导航方向

我将使用
beforetransformation
,因为它在导航时触发一次,而不像
beforechange
触发两次

如果
options.direction
没有返回
back
,请按如下方式运行代码

$(document).on("pagecontainerbeforetransition", function (e, data) {
  if ( typeof data.options.direction != "undefined" && data.options.direction != "back" ) {
     $(document).one("pagecontainershow", function (e, data) {
       alert(data.toPage[0].id);
     });
   }
});
我使用了
pagecontainershow
一次,只是为了显示警报。使用它来运行您想要的任何函数


因为您使用的是单页模型,所以每个页面div都位于单独的文件中。SPM中jQuery Mobile的默认行为是,一旦您离开外部页面,外部页面就会从DOM中删除。页面“a”是登录页,它被缓存并且从未被删除

当从“a”导航到“b”时,您会在“b”中收到警报。当您从“b”导航到“c”时,“b”将从DOM中删除,“c”将被加载并创建。你那里也有警报。当您从“c”导航回“b”时,“c”被删除,“b”被加载并创建。导航回“a”不会重新加载它,因为它已被缓存(登录页)

如果希望外部页面保留在DOM中,请将它们缓存为最近的问题之一

或者给每个外部页面div一个唯一的ID,然后运行一次
pagecreate


我已经更新了我的答案,以反映您的要求。如果您需要进一步的澄清,请让我知道。感谢您介绍
选项。方向
。我想这正是我所需要的。@KaFaiLo如果你觉得这个答案很有帮助,并且回答了你所关心的问题,就把它标记为一个被接受的答案。否则,如果我遗漏了其他内容,请告知。已尝试
PageContainerBeforTransition
:a转到b:
数据。选项。方向未定义█  b去a:是“回来了”█  那么如何测试前向导航呢@OmarWhen
options.direction
未定义,表示既不后退也不前进。当使用浏览器的后退按钮或
$.mobile.back()
=
data rel=“back”
时,它会返回。当按下浏览器的“前进”按钮时,它是向前的。
pagecontainerbefortrensation
是我想要的。
3. (Here in 3., you type in the URL of a only once. 
   NO refresh/F5 key in the whole process)
   .
   Load a         ->  alert a  
   a  go to    b  ->  alert b  
   b  go to    c  ->  alert c  
   .  
   c  back to  b  ->  no alert  
   b  back to  a  ->  no alert  
   .  
   a  go to    b  ->  alert b  
   b  back to  a  ->  no alert  
   .  
   a  go to    b  ->  alert b  
   b  go to    c  ->  alert c  
   c  go to    d  ->  alert d  
   .  
   d  back to  c  ->  no alert  
   c  back to  b  ->  no alert  
$(document).on("pagecontainerbeforetransition", function (e, data) {
  if ( typeof data.options.direction != "undefined" && data.options.direction != "back" ) {
     $(document).one("pagecontainershow", function (e, data) {
       alert(data.toPage[0].id);
     });
   }
});
$(document).one("pagecreate", "#pageB", function (e) {
  alert("created: " + this.id);
});