Javascript 无页面更改事件触发

Javascript 无页面更改事件触发,javascript,jquery,events,mobile,jquery-mobile,Javascript,Jquery,Events,Mobile,Jquery Mobile,在jquerymobile中,我试图检测对特定页面的成功页面更改。我有以下代码,内联在我想要加载的页面上 <script> $(document).bind( "pagebeforechange", function( e, data ) { alert("pagebeforechange"); }); $(document).bind( "pagechange", function( e, data ) {

在jquerymobile中,我试图检测对特定页面的成功页面更改。我有以下代码,内联在我想要加载的页面上

<script>
     $(document).bind( "pagebeforechange", function( e, data ) {
            alert("pagebeforechange");   
        });

        $(document).bind( "pagechange", function( e, data ) {
            alert("pagechange");   
        });
        $(document).bind( "pagechangefailed", function( e, data ) {
            alert("pagechangefailed");   
        });
       $(document).live( "pagebeforechange", function( e, data ) {
            alert("pagebeforechange live");   
        });

        $(document).live( "pagechange", function( e, data ) {
            alert("pagechange live");   
        });
        $(document).live( "pagechangefailed", function( e, data ) {
            alert("pagechangefailed live");   
        });
</script>

$(文档).bind(“pagebeforechange”,函数(e,数据){
警报(“更改前页面”);
});
$(文档).bind(“页面更改”,函数(e,数据){
警报(“页面更改”);
});
$(文档).bind(“pagechangefailed”,函数(e,数据){
警报(“页面更改失败”);
});
$(document).live(“pagebeforechange”,函数(e,数据){
警报(“现场更改前页面”);
});
$(文档).live(“页面更改”,函数(e,数据){
警报(“页面更改实时”);
});
$(document).live(“pagechangefailed”,函数(e,数据){
警报(“pagechangefailed live”);
});
直接加载页面或刷新页面时,我会收到相应的警报,但在Jquery移动应用程序中从另一个区域导航时,我不会收到相应的警报

页面由页脚中的“您的汽车”选项卡调用

<div  id="footer" data-role="footer" data-position="fixed"> 
    <div data-role="navbar">
        <ul>
            <li><a href="index.html">Home</a></li>
            <li><a href="index.html">Features</a></li>
            <li><a href="about.html">Your Car</a></li>
            <li><a href="index.html">Contact</a></li>
        </ul>
    </div>
</div>


您在哪里绑定到此事件

您是否在文件中阅读了以下内容:

重要提示:使用pageInit(),而不是$(document).ready()

在jQuery中学习的第一件事是调用 $(document).ready()函数,以便在 DOM已加载。但是,在jQuery Mobile中,Ajax用于加载 导航时,将每个页面的内容导入DOM,并准备好DOM 处理程序仅对第一页执行。每当 加载并创建新页面后,可以绑定到pageinit事件。 本页底部详细解释了此事件


在pageshow事件中放置代码是否有效?如果您试图检测页面或位置,则可能会出现此问题。可能是这样的:

<script type="text/javascript">

$('[data-role=page]').live('pageshow', function (event, ui) {
   hash = location.hash;
   page = hash.susbtr(1);

   if (page.indexOf('about.html') >= 0) { 
      alert('you made it!'); 
   }
});

</script>

$('[data role=page]')。live('pageshow',函数(事件,ui){
hash=location.hash;
page=hash.susbtr(1);
如果(page.indexOf('about.html')>=0{
警惕(“你成功了!”);
}
});
更新

在进一步测试这个场景并重新阅读您的问题之后,我认为我能够重现结果

这与您描述的一样,仅在直接加载页面或刷新页面时触发警报:

<body>

<div data-role="page">
    <!-- page stuff -->
</div> 

<script type="text/javascript"> ..bind events... </script>
</body>

…绑定事件。。。
但是,当我将javascript直接移动到页面内部时,它会按预期工作并触发所有绑定事件,无论如何到达页面:

<body>

<div data-role="page">

    <script type="text/javascript"> ..bind events... </script>

    <!-- page stuff -->
</div> 

</body>

…绑定事件。。。

Luke的想法是正确的:显然,您遇到的问题与代码中绑定发生的位置有关。沙纳布斯证明了这一点

然而,在您的情况下,您应该在jQuery mobile的
mobileinit
事件被触发时进行绑定,而不是像Luke所建议的那样
pageInit

示例(在所有页面更改事件上激发):


$(document).bind('mobileinit',function(){
$(文档).on('pagechange',函数(){
window.alert('page changed!');
});
});

如上面代码所示,请注意,由
mobileinit
触发的处理程序必须包含在jQuery mobile
标记之前。

您是如何触发页面更改的?你能把你的一些代码包括进来吗?我在问题中把它说得更清楚了,谢谢。你试过pageshow或pagebeforeshow页面转换事件吗?jQM文档:我都没有使用。在测试了pageinit之后,它似乎没有更好的效果,在阅读文档时,pagechange似乎就是我想要的want@MildFuzz有了这个,我想说,也许在那个里你们绑定到你们的事件,这是早期的解决方案,我有,但这是一个黑客,不是一个真正的解决方案,我的解决方案也不太管用。如果您声明脚本类型-
type=“text/jasvascript”
,会有帮助吗?该死,笔记本电脑正在工作,我真的想试试这个!!我将在星期一回来报到
<script type="text/javascript">
    $(document).bind('mobileinit', function() {
        $(document).on('pagechange', function () {
            window.alert('page changed!');
        });
    });
</script>
<script src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.js"></script>