如何使用开/关时,页面保存在DOM正确取消绑定jQuery的-Mobile的事件?(how to p

2019-09-30 04:34发布

由于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
            }
     });

所以我只允许第一装订传递,然后我阻止走来每隔结合的尝试。

虽然这个工作,这是很不理想。

问题
如何与事件绑定时,应适当结合/ offed方案? 有没有一种通用的方法(杀掉所有)或做我必须做的每一结合这种结合? 也许更重要的是:它是更好的性能,明智的做法是做一个绑定一次,并保持或绑定/解除绑定,当用户来到/离开页面?

感谢您的输入!

编辑
所以我命名空间我的所有事件,然后监听pageHide像这样:

$(document).on('pagehide.register', '#register', function(){
   $(document).off('.registryEvents');
   });

尽管这似乎解除绑定,这也激发当过我关闭了页面上的自定义对话框/ selectmenu,所以离开该页前,我失去我的绑定。 所以部分答案,我应该使用关闭(),但如何绑定到该页面真正被留下与启闭选择菜单?

Answer 1:

当您使用.on()这样的,你是委托事件处理的document元素,这意味着你可以选择你想要安装下放事件绑定随时因为document元素始终可用。

我有两个建议:

  • 使用pageinitpagecreate事件只能运行在页面添加到DOM和初始化特定页面的绑定。 使用这种方法,我不会委派内的事件绑定pageinitpagecreate事件处理程序,因为当他们开火,所有的伪页面上的元素在DOM:

$(document).on('pageinit', '#register', function() {
    //note that `this` refers to the `#register` element
    $(this).find('.registerSubmitter').on('click', function(e) {
        // do something
    });
});
  • 绑定委派的事件处理程序一次,不用担心网页时实际上是在DOM:

//this can be run in the global scope
$(document).on('click.register', '.registerSubmitter', function(e) {
    // do something
});

基本上,当您使用委托事件绑定一个像你这样,将事件处理程序的CPU的实际命中少,但如果它的委托事件处理程序的选择匹配待检查的每个事件分派(即气泡任何形式的)时间有。

当你直接绑定到的元素,通常需要更多的时间来完成实际的约束力,因为每个单独的元件被绑定到,而不是绑定一次的document元素像事件代表团。 然而,这有没有代码运行,除非特定的元素接收到特定事件的好处。

从文档的快速导语:

触发页面上的初始化,初始化发生之后。 我们建议结合该事件,而不是DOM准备就绪(),因为这会不管该页面是否是直接或装载工作,如果内容被拉到另一个页面作为Ajax导航系统的一部分。

来源: http://jquerymobile.com/demos/1.1.0/docs/api/events.html



文章来源: how to properly unbind events in Jquery-Mobile using on/off when a page is kept in the DOM?