【问题标题】:How to unbind a specific event handler如何取消绑定特定的事件处理程序
【发布时间】:2010-10-19 21:23:34
【问题描述】:

代码:

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

【问题讨论】:

  • 为什么将事件对象命名为“exit”?
  • keyCode==27 附加到$(document).keyup...请澄清。

标签: javascript jquery events event-handling unbind


【解决方案1】:

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

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

然后在解除绑定时:

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

【讨论】:

    【解决方案2】:

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

    为了完整起见,如果您想将同一事件的多个处理程序附加到 same 对象,您可以使用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 完全相同,并且还可以处理命名空间事件。

    【讨论】:

    • 这是最好的答案,命名空间的概念非常有用,我一直在使用它。如果您(或更重要的是其他人)在以后将事件绑定添加到同一元素而没有意识到它已经绑定了事件,它会提供支持。当然,如果他们使用 $('#myelement').unbind('focus'),键入没有命名空间的锤子,你的事件无论如何都将是未绑定的......因此告诉与你一起工作的人开始使用它!
    • 这非常有用 - 对我来说是新事物 - 命名空间 - 谢谢!
    • 虽然命名空间很有用,但针对已绑定函数的特定实例的能力可能更有用。我有几个绑定到我的文档的相同函数的实例,我只想销毁其中一个。命名空间对我没有帮助。
    • 绝对是最佳答案
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2017-10-05
        • 2010-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-05
        • 2013-11-20
        • 1970-01-01
        相关资源
        最近更新 更多