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

码:

$('#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事件处理程序不变?

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

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

然后在解绑后:

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

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

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

 $('#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.on是添加和删除事件处理程序的首选方法。 为此目的,它们的行为与.bind.unbind ,也可以使用命名空间事件。

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

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

如果你在一个元素上只有一个处理器,你可以使用unbind来安全地解除它的unbind而不像Nick Craver所说的那样使用命名函数。 在这种情况下,打电话

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

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