【发布时间】:2014-05-09 06:47:21
【问题描述】:
我发现了一些有点烦人的东西,并想确保我没有做任何明显错误的事情。 我正在使用 jquery-mobile 1.4。
我有一个 mainpage.html,它调用了一个以对话框建模的 dialogpage.html。对话页面有一个
dialogpage 也有一个 pageshow 事件,像这样附加到 div 页面
$(document).on('pageshow', '#dialogpage', function(event) {
console.log('pageshow dialogpage');
});
我发现每次打开此对话框页面时,都会调用一个额外的 pageshow 事件。 我的意思是,当我第一次打开对话框时,控制台会打印一次“pageshow dialogpage”。我第二次打开对话框时,它会打印两次。页面的第三次打开打印三次,等等
似乎每次打开页面时都会一次又一次地附加 pageshow 事件。从某种意义上说,这是有道理的,但处理起来似乎很烦人。
我的解决方案是像这样添加一个取消绑定事件:
$(document).on('pagehide', '#dialogpage', function(event) {
console.log('pagehide dialogpage');
$(document).unbind('pageshow');
$(document).unbind('pagehide');
});
这似乎可以防止“pageshow dialogpage”被多次打印。但这是否意味着我需要取消绑定对话框页面中的所有事件?
我是不是做错了什么?
【问题讨论】:
-
pageshow已弃用,将在 1.5 中删除,请改用pagecontainershow。 -
试试 $(document).one('pageshow', '#dialogpage', function(event) { console.log('pageshow dialogpage'); });
-
感谢您的提醒,奥马尔
-
谢谢塞尔瓦。我会试试这个。我假设 .one() 会导致此事件触发一次,所以我会看看它是否按照我需要的方式运行
-
selva,one() 方法似乎有效。但恐怕我仍然不太了解 jquery 的内部工作原理,无法知道使用 one() 或 unbind() 是否会是更好的方法......
标签: jquery jquery-mobile jquery-mobile-pageshow jquery-mobile-dialog