使用bind()vs on()的自定义事件

时间:2013-03-11 20:57:49

标签: jquery

我遇到了添加自定义事件的代码,以检测源自键盘或鼠标事件的输入文本更改:

http://www.zurb.com/playground/jquery-text-change-custom-event

代码有点旧,文档说使用bind()附加自定义事件,例如:

$('#exhibita').bind('hastext', function () {
  $('#exhibitaButton').removeClass('disabled').attr('disabled', false);
});

jQuery docs

  

从jQuery 1.7开始,.on()方法是将事件处理程序附加到文档的首选方法。对于早期版本,.bind()方法用于将事件处理程序直接附加到元素。

我以为我可以将代码重写为:

$(document).on('hastext', '#exhibita', function () {
  $('#exhibitaButton').removeClass('disabled').attr('disabled', false);
});

但永远不会触发事件处理程序。

问题

  • 我在使用on()
  • 时犯了错误
  • 是否必须重写提供自定义事件的代码才能支持on()?如果是这样,必须改变什么?
  • 是否记录bind()是未来版本的jQuery中的删除候选者?我没有在文档中看到折旧警告,但我知道{1.9}已删除了live()die() ...
  • 在不重写代码的情况下,是否有使用这些自定义事件的面向未来的方法?

1 个答案:

答案 0 :(得分:1)

您在此处使用on的方式是创建均匀委派。这基本上等同于旧的jquery live

此自定义事件可能无法正常冒泡。试试这个:

$('#exhibita').on('hastext', function () {

如果绑定有效,这将有效。