【问题标题】:Unbind events from all namespaces except a particular one从除特定名称空间之外的所有名称空间中取消绑定事件
【发布时间】:2015-02-10 02:57:11
【问题描述】:

如果我将 jQuery scroll 事件处理程序绑定到特定的命名空间......

$(window).on('scroll._my_namespace',function() { ... });

...有什么方法可以解除所有scroll 事件处理程序的绑定除了分配给该命名空间的那些?例如,如果我这样做……

$(window).off('scroll._my_namespace');

...它会取消绑定特定的 scroll 处理程序,如果我这样做...

$(window).off('scroll');

...它将解除 所有 scroll 处理程序的绑定。

到目前为止我所做的尝试:

$(window).off('scroll.'); // Doesn't seem to do anything

从没想过这会起作用,但我想我最好在发布之前尝试一下:

$(window).off('scroll:not("._my_namespace")'); // Also doesn't do anything

我想要做的是取消绑定所有scroll 事件处理程序除了分配给特定命名空间的那个。有没有办法做到这一点?

【问题讨论】:

    标签: javascript jquery javascript-events event-handling


    【解决方案1】:

    除了为所有必须删除的处理程序使用另一个公共命名空间之外,我不知道使用公共 API 的任何方式。

    但使用私有事件集合,您可以尝试类似

    var events = $._data(window, 'events');
    for (var i = events.scroll.length - 1; i >= 0; i--) {
        var handler = events.scroll[i];
        if (handler && handler.namespace != 'ns') {
            $(window).off('scroll', handler.handler)
        }
    }
    

    $(window).on('scroll.ns', function(e) {
      console.log('x', e.type, e.handleObj.namespace, e)
    });
    $(window).on('scroll.ns2', function(e) {
      console.log('y', e.type, e.handleObj.namespace, e)
    });
    $(window).on('scroll.t', function(e) {
      console.log('z', e.type, e.handleObj.namespace, e)
    });
    
    $('button').click(function() {
      var events = $._data(window, 'events');
      for (var i = events.scroll.length - 1; i >= 0; i--) {
        var handler = events.scroll[i];
        if (handler && handler.namespace != 'ns') {
          $(window).off('scroll', handler.handler)
        }
      }
    });
    body {
      height: 1000px;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <button>Remove</button>

    【讨论】:

      【解决方案2】:

      遍历您的命名空间并为每个命名空间调用 off,但您不想要他。

      【讨论】:

        猜你喜欢
        • 2018-09-24
        • 2010-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-02
        相关资源
        最近更新 更多