是否可以从具有多个处理程序的事件中删除一个特定的事件处理程序?

mar*_*rue 46 jquery

当我搜索我现在遇到的问题的解决方案时,我发现了这个线程:jQuery:同一事件的多个处理程序.现在我想知道是否有可能只删除这些处理程序中的一个?

Mat*_*all 78

如果您使用匿名回调,则有可能:

var $elt = $(...);

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

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

// unbind just the first
$elt.unbind('click', clickHandler1);
Run Code Online (Sandbox Code Playgroud)

狂野的Demo出现了!

另见:.unbind()docs.

  • 狂野演示出现了!:-D (16认同)
  • 请注意,“bind”、“unbind”在 v3.0 中已弃用,请改用“on”、“off”。 (2认同)

Kev*_*ski 54

实际上,您可以通过事件命名空间使用匿名回调来执行此操作:

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

$elt.unbind('click.handler1');
Run Code Online (Sandbox Code Playgroud)

见修改演示这里.

这里了解更多信息.

这是在jQuery 1.4.3中添加的,它实际上是在提出问题之前超过4个月发布的.

  • 你先生一百万点给你.只是用它来解决一个非常棘手的问题. (2认同)