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