考虑一下
在多页jqm文档中,有一个id为#internal的页面。在某些时候我做
$('#internal').remove();
页面已删除,但
$('body').on('pagecontainerremove',function(e,ui){console.log(ui.toPage);console.log('page removed');})
不开火。谷歌搜索pagecontainerremove并尝试各种删除页面的方法并没有产生任何有用的东西。
我非常感谢您对此的任何帮助
答案 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 强>