如何取消绑定特定的事件处理程序

时间:2010-10-19 21:23:35

标签: javascript jquery events event-handling unbind

代码:

$('#Inputfield').keyup(function(e)
        {
            if(e.which == 13)
            {
                functionXyz();
            }
            else
            {
                functionZyx();
            }
    });  


$(document).keyup(function(exit) {
              if (exit.keyCode == 27) { functionZzy(); }
});

问题:如何删除keyCode == 27的keyup事件处理程序并保持其他$(document).keyup事件处理程序完好无损?

4 个答案:

答案 0 :(得分:78)

您必须使用命名函数,以便在调用.unbind()时引用该特定处理程序,如下所示:

function keyUpFunc(e) {
  if (e.keyCode == 27) { functionZzy(); }
}
$(document).keyup(keyUpFunc);

然后解除绑定时:

$(document).unbind("keyup", keyUpFunc);

答案 1 :(得分:63)

您正在将事件处理程序附加到不同的元素,因此您可以安全地从特定对象中删除处理程序(我已经提到过)。

为了完整起见,如果要将同一事件的多个处理程序附加到相同对象,则可以使用namespaced events

$('#Inputfield').bind('keyup.keep', function(e){/*...*/});
$('#Inputfield').bind('keyup.notkeep', function(e){/*...*/});

$('#Inputfield').unbind('keyup.notkeep');
// or event  $('#Inputfield').unbind('.notkeep');

jQuery 1.7 以来,方法.on.off是添加和删除事件处理程序的首选方式。为此,它们的行为与.bind.unbind完全相同,并且还可以处理命名空间事件。

答案 2 :(得分:8)

jQuery允许您绑定在第一次调用后将被解除绑定的事件。如果您只想运行此keyup函数一次,请查看此处列出的.one()方法:http://api.jquery.com/one/

$(document).one('keyup', function(e) {
              if (e.keyCode == 27) { functionZzy(); }
});

答案 3 :(得分:7)

如果你在一个元素上只有一个处理程序,你可以使用unbind安全地解除绑定,而不使用Nick Craver建议的命名函数。在这种情况下,请致电

$('#Inputfield').unbind('keyup');

不会影响document上的处理程序。