5

我有这个:

$(function(){
    //remove keydown doSomething2
    $("body").keydown(doSomething1);
});

在其他观点我有这个:

$(function(){
    //remove keydown doSomething1
    $("body").keydown(doSomething2);
});

如何处理评论中的内容?使用我当前的代码,doSomething1 和 doSomething2 都被调用。我想禁用我不需要的那个。

4

3 回答 3

10

要使用 jQuery 删除事件侦听器,您可以使用.off()

$("body").off("keydown", doSomething2);

请记住,该keydown方法只是.on("keydown", ...).

但是,要“禁用”它们,可能更容易只有一个处理程序根据当前选定的视图执行不同的事情,或者将它们都绑定并且每个都进行简短检查以确保当前选择了正确的视图。

于 2012-08-03T13:27:14.797 回答
4

如果doSomething2函数引用,您可以使用.off()(jQuery 1.7+)或.unbind()删除 jQuery 绑定事件处理程序:

$('body').off('keydown', doSomething2);

// or

$('body').unbind('keydown', doSomething2);

请注意,执行顺序将是一个因素。如果首先运行取消绑定事件处理程序的代码,它将无效。一般来说,jQuery 事件处理程序是按照它们绑定的顺序触发的,所以如果你的问题中的第一个代码片段首先执行,这种方法将不起作用(你需要重新排序)。

于 2012-08-03T13:27:45.623 回答
4

使用 jQuery 尝试如下:

$(function(){
    // this would remove keydown from body
    $("body").unbind('keydown', doSomething2);
});
于 2012-08-03T13:29:07.483 回答