Events JQM pageinit事件未触发

Events JQM pageinit事件未触发,events,jquery-mobile,Events,Jquery Mobile,我正在使用JQM开发一个web应用程序。在一页中,我有以下脚本: $('#testpage').on('pageinit', function () { alert('testpage pageinit event fired'); }); 其中,页面id=testpage 根据JQM文档,当第一次访问页面时加载页面时,应该会触发此事件,但我不会这样做 当我直接进入该页面时,我会看到警报,但如果我先访问其他页面,然后再进入该页面,我不会看到警报使我相信事件根本没有触发 我还尝试了以下语法:

我正在使用JQM开发一个web应用程序。在一页中,我有以下脚本:

$('#testpage').on('pageinit', function () {
  alert('testpage pageinit event fired');
});
其中,页面id=testpage

根据JQM文档,当第一次访问页面时加载页面时,应该会触发此事件,但我不会这样做

当我直接进入该页面时,我会看到警报,但如果我先访问其他页面,然后再进入该页面,我不会看到警报使我相信事件根本没有触发

我还尝试了以下语法:

 $(document).on('pageinit', '#testpage', function () {
   alert('testpage pageinit event fired');
 });
同样的事情也会发生

这是在JQM中能够做的最基本的事情之一,但它失败了。请告诉我为什么它没有按照文档记录的方式工作

为什么将pageinit绑定到页面不起作用 发生这种情况的原因是,当您将
pageinit
绑定到
testPage
时,它还不在DOM中。所以它不起作用您必须在
中有这段代码,它将在
部分加载之前加载,您的
测试页位于该部分。这就是它失败的原因。那么你是如何让它工作的呢?添加以下内容:

$('#testpage').on('pageinit', function () {
  alert('testpage pageinit event fired');
});
到HTML的
部分的末尾。因此,所有内容都将被加载,然后您的页面将绑定到其
pageinit
事件。下面是您的代码的外观:

<body>
  <div data-role="page" id="testPage"></div>
  <script>
    $("#testPage").on("pageinit", function() {
       alert("pageinit fires- this is in body.");
    });
  </script>
</body> 

$(“#testPage”)。在(“pageinit”,function()上{
警报(“pageinit激发-这在体内。”);
});
下面是一个演示:

将pageinit绑定到文档的原因 在这种情况下,绑定您的
pageinit
有效的原因是
document
将出现在调用页面的实例中。因此,
pageinit
通过事件委托管理到
testPage
。当第一次加载
testPage
时,
文档
触发
testPage
pageinit
事件


希望这能把事情弄清楚。

我发现了问题,那就是之前页面上的脚本代码破坏了我试图捕获pageinit事件的页面上的脚本代码。当我删除那个糟糕的脚本时,它开始工作了。所以这不再是一个问题。

您将脚本放在哪里?内部#测试页?或者在一个单独的js文件中?我将它放在testpage中。不,脚本在正文中,但我相信我发现了问题(或者至少是什么让它工作的)。我正在ASP.NETMVC4中开发,在默认布局文件中,它将jquery和jquery移动脚本的呈现放在正文的末尾。这意味着在加载jquery和jquery mobile之前,各个页面中的任何脚本都会被呈现。我通过查看呈现页面的源代码发现了这一点。我将jquery和jquery mobile的加载移到了head部分的末尾,然后testpage上的pageinit事件按其应有的方式启动。虽然pageinit在测试屏幕上启动,但它没有在其他屏幕上启动,我无法解释原因。