jquery mobile pagecontainerbeforeshow事件未触发

时间:2015-08-19 23:14:52

标签: jquery-mobile

我正在尝试在Jquery mobile 1.4.5中注册pagecontaintershow事件。在我的页面加载然后更改我的pagecontainerbeforeshow事件永远不会被捕获或触发。新页面确实正确加载

以下代码等待按钮单击,然后更改为新页面。我在加载之前注册了pagecontainerbeforeshow事件。我甚至尝试过不同的pagecontainer听众,但仍然一无所获。捕捉事件的正确方法是什么?

更新1:

我正在阅读有关您可以和不能将pagecontainer事件绑定到的内容的相互矛盾的信息。我已经读过,只有绑定到'document'才有效,而我也读过你应该能够绑定到实际的页面id。我刚刚测试了绑定到文档并且该事件被触发但是这将在每个页面加载时触发。我是否必须检查活动页面是什么?你被允许绑定到id吗?

更新2:

所以我做了一些更多的阅读,jqm 1.4到1.4.3只允许你使用'document'绑定。 jqm 1.4.5应该让你绑定到和页面ID也。然而,这是我的问题所在。它不起作用。有什么想法吗?

new_page.html:

<div data-role="page" id="new_page">
    <div data-role="header" >Header</div>
    <div data-role="content" >Hello</div>
    <div data-role="footer" >footer</div>
</div>

JS:

     $(document).on("click", "#button", function  () {

//设置事件监听器(永远不会被触发)

        $("#new_page").one( "pagecontainerbeforeshow", function( event, ui ){
            /// do something
        });

//加载新页面(页面加载正常)

        $($mobile_pagecontainer).pagecontainer( "change", "new_page.html", { role: "page"} );

     });

3 个答案:

答案 0 :(得分:2)

此时的jQuery Mobile文档至少可以说令人困惑,这是基于我自己的研究和测试。

被描述为一个,pagecontainer本身它是一个JQM Widget,因此,需要所有页面增强作为普通页面(最终它是一个小部件)。因此,在调用任何pagecreate事件之前,您需要确保在文档本身上触发了pagecontainer事件。这个小提琴说明了这种行为,如果你从文档中删除pagecreate事件,你会注意到事件根本没有被触发,因为与document.ready JQM有相同的冲突。

http://jsfiddle.net/juancalpizar/c6eo93Lt/1/

答案 1 :(得分:1)

这可能会迟到但对我有用的是

$("body").on("pagecontainerbeforeshow", 
    function( event, ui ) {
         if(ui.toPage[0].id === "new_page"){
              // Do stuff
         }
    }
);

如果这也不起作用,请尝试使用

相同的代码

"pagecontainerbeforetransition"

答案 2 :(得分:0)

我在JQuery mobile 1.4应用程序上遇到了同样的问题,页面事件没有触发。

您是否尝试过以下语法?

    $(document).delegate("#pageId", "pagecontainerbeforeshow", function() {
        //do Something
    });

请注意,如果您使用pagebeforeshow代替pagecontainerbeforeshow,则有时会对我有用,但是使用时会被删除。

如果你能让它工作,请告诉我。谢谢。