jQuery Mobile pagecontainer remove永远不会触发

时间:2014-11-08 06:49:10

标签: jquery-mobile event-handling

考虑一下

在多页jqm文档中,有一个id为#internal的页面。在某些时候我做

$('#internal').remove();

页面已删除,但

$('body').on('pagecontainerremove',function(e,ui){console.log(ui.toPage);console.log('page removed');})

不开火。谷歌搜索pagecontainerremove并尝试各种删除页面的方法并没有产生任何有用的东西。

我非常感谢您对此的任何帮助

1 个答案:

答案 0 :(得分:1)

删除事件pageremove及其' "后继"在单页模型中的外部页面上触发pagecontainerremove。 jQuery Mobile在导航时从DOM中删除外部页面。默认情况下,jQuery Mobile不会缓存外部页面并绑定bindRemove以删除它们。但是,如果外部页面被缓存data-dom-cache="true" remove 事件将无法附加到该页面以将其从DOM中删除。

虽然pageremove已被pagecontainerremove取代,但后者并未触发,而且肯定是jQuery Mobile 1.4中的一个错误。

/* doesn't fire */
$(document).on("pagecontainerremove", function (e) {
    console.log("pagecontainer event: " + e.type);
});

/* does fire */
$(document).on("pageremove", function (e) {
    console.log("page event: " + e.type);
});
  

<强> Demo

尽管如此,可以在多页面模型中使用bindRemove让jQuery Mobile一旦隐藏就将其删除。首先,将data-external-page="true"添加到要由jQuery Mobile删除的页面div,然后将其标记为要删除$("#pageID").page("bindRemove")

<div data-role="page" id="pageID" data-external-page="true">
$(document).on("pagecreate", "#pageID", function (e) {
    $(e.target).page("bindRemove");
});
  

<强> Demo