【问题标题】:Is it necessary to unbind pageshow events after closing dialog?关闭对话框后是否需要取消绑定页面显示事件?
【发布时间】: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


【解决方案1】:

由于您使用 on 绑定事件,我将使用 off 解除绑定。我还要指定过滤器(#dialogpage):

$(document).off('pageshow','#dialogpage');
$(document).off('pagehide','#dialogpage');

更新:

哦,你会从 dom 中删除对话框吗?

【讨论】:

猜你喜欢
  • 2013-01-02
  • 1970-01-01
  • 1970-01-01
  • 2018-08-18
  • 1970-01-01
  • 2012-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多