如何解除绑定特定的事件处理程序
码:
$('#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
上的处理程序。