Javascript 如何解除特定事件处理程序的绑定

Javascript 如何解除特定事件处理程序的绑定,javascript,jquery,events,event-handling,unbind,Javascript,Jquery,Events,Event Handling,Unbind,代码: $('#Inputfield').keyup(function(e) { if(e.which == 13) { functionXyz(); } else { functionZyx(); } }); $(document).keyup(functi

代码:

$('#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事件处理程序完好无损?

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

function keyUpFunc(e) {
  if (e.keyCode == 27) { functionZzy(); }
}
$(document).keyup(keyUpFunc);
然后在以后解除绑定时:

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

jQuery允许您绑定在第一次调用后将被解除绑定的事件。如果希望只运行此keyup函数一次,请查看下面列出的.one()方法:


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

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

不会影响
文档上的处理程序

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

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



由于jQuery 1.7
,方法和是添加和删除事件处理程序的首选方法。为此,它们的行为完全类似于
.bind
.unbind
,也可以处理命名空间事件。

为什么要将事件对象命名为“exit”?
keyCode==27
是附加到
$(文档)的对象。keyup
。。。请澄清。这是最好的答案,名称空间的概念非常有用,我一直在使用它。如果您(或者更重要的是其他人)在以后向同一元素添加事件绑定,而没有意识到该元素已经绑定了事件,那么它将提供支持。当然,如果他们使用$(“#myelement”).unbind('focus'),则键入hammer而不使用名称空间,您的事件无论如何都将被解除绑定。。。因此,告诉你的同事开始使用它!这是非常有用的-对我来说是新事物-名称空间-谢谢!虽然名称空间可能很有用,但针对已绑定函数的特定实例的功能可能更有用。我的文档绑定了几个相同函数的实例,我只想销毁其中一个。名称空间对我没有帮助。绝对是最好的答案
$('#Inputfield').unbind('keyup');
$('#Inputfield').bind('keyup.keep', function(e){/*...*/});
$('#Inputfield').bind('keyup.notkeep', function(e){/*...*/});

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