由于 Jquery Mobile 在导航时会在 DOM 中保留一些页面,因此在来回移动时可能会多次访问一个页面。
如果我要绑定到如下所示的页面并在此绑定内执行我的所有页面逻辑,其中包括“嵌套元素绑定”:
// listener for the page to show:
$(document).on('pagebeforeshow.register', '#register', function() {
// stuff
// page event bindings:
$(document).on('click.register', '.registerSubmitter', function(e) {
// do something
});
});
来回移动会导致我的嵌套绑定被附加多次。
现在尝试像这样解决这个问题(不起作用......):
$(document).on('click', '.registrySubmitter', function(e) {
if ( $(this).attr('val') != true ) {
$(this).attr('val') == true;
// do something
}
});
所以我只允许第一个绑定通过,然后我阻止所有其他绑定尝试。
虽然这可行,但远非最佳。
问题:
应该如何以及何时正确地解除/关闭事件绑定?有没有一般的方法(杀死所有)还是我必须每次绑定都做这个绑定?也许更重要的是:在用户进入/离开页面时进行一次绑定并保留它或绑定/取消绑定在性能方面是否更好?
感谢您的输入!
编辑:
所以我正在命名我所有的事件,然后像这样监听 pageHide:
$(document).on('pagehide.register', '#register', function(){
$(document).off('.registryEvents');
});
虽然这似乎解除了绑定,但当我关闭页面上的自定义对话框/选择菜单时它也会触发,所以我在离开页面之前失去了绑定。所以部分答案,我应该使用 off(),但是如何绑定到真正离开的页面与打开和关闭选择菜单?