【问题标题】:Is it possible to remove one specific event handler from an event with multiple handlers?是否可以从具有多个处理程序的事件中删除一个特定的事件处理程序?
【发布时间】:2011-07-05 09:51:57
【问题描述】:

当我搜索我现在遇到的问题的解决方案时,我发现了这个帖子:jQuery: more than one handler for same event。现在我想知道是否可以只删除其中一个处理程序?

【问题讨论】:

  • 同一个事件还是不同事件?
  • 这可不容易。你必须做一个 hack,jQuery 不是为此而设计的。改用事件命名空间。
  • 我认为,如果您将事件处理程序存储在一个变量中,您可能可以像广告一样使用变量将其删除,但我尚未对其进行测试。
  • @Raynos:如果我理解了这个问题,那你就错了——请看我的回答。
  • @MattBall 我在想匿名函数。是的,如果您有指向 this 的指针,您可以取消绑定函数。

标签: jquery


【解决方案1】:

如果您不使用匿名回调,这是可能的:

var $elt = $(...);

function clickHandler1(event){...}
function clickHandler2(event){...}

// bind both
$elt.click(clickHandler1);
$elt.click(clickHandler2);

// unbind just the first
$elt.unbind('click', clickHandler1);

A wild Demo appeared!

另请参阅:.unbind() docs。

【讨论】:

  • 狂野Demo出现了! :-D
  • 请注意,bind、unbind 在 v3.0 上已弃用,请改用 on、off。
【解决方案2】:

实际上,您可以通过事件命名空间使用匿名回调来做到这一点:

$elt.bind('click.handler1', function(event) {
    alert('click handler 1');
});

$elt.unbind('click.handler1');

查看修改后的演示here。

和here 了解更多信息。

这是在jQuery 1.4.3中添加的,实际上是在提出问题前4个多月才出现的。

【讨论】:

  • 我们可以在函数中传递参数吗?
  • 在使用匿名回调时,这是一个非常好的答案。爱它。
  • 这应该是公认的答案,因为大多数 bind/on 调用都有匿名函数。
  • 非常感谢您的回答,尝试了 $(document).on('keydown.fake', function(){}); --->>> $(document).on('keydown.fake');没有注意到 .on() .off() 文档中的事件命名空间
  • 一百万分给你先生。只是用它来解决一个非常棘手的问题。
【解决方案3】:

这篇文章已经很久了,所以我想我会在今天(2019 年)发表这篇文章。

上面的大多数旧答案,包括接受的答案(在编写时是正确的),使用自 jQuery v.3.0 以来已弃用的 unbind 方法。

从 jQuery 3.0 开始,.unbind() 已被弃用。它被取代 .off() 方法从 jQuery 1.7 开始,所以它的使用已经 气馁。

Source

下面是使用.off() 方法的方法:

var foo = function() {
  // Code to handle some kind of event
};

// ... Now foo will be called when paragraphs are clicked ...
$( "body" ).on( "click", "p", foo );

// ... Foo will no longer be called.
$( "body" ).off( "click", "p", foo );

Source

这适用于使用.on() 方法实现的所有事件处理程序,也适用于未委托的事件处理程序。只需将“body”替换为您的元素选择器并删除.off() 方法的第二个参数(上例中的“p”)。

【讨论】:

    猜你喜欢
    • 2016-05-23
    • 2013-09-17
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    相关资源
    最近更新 更多