Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 使用bind()和on()的自定义事件_Jquery - Fatal编程技术网

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

Jquery 使用bind()和on()的自定义事件,jquery,Jquery,我遇到了添加自定义事件以检测来自键盘或鼠标事件的输入文本更改的代码: 代码有点旧,文档中说要使用bind()来附加自定义事件,例如: $('#exhibita').bind('hastext', function () { $('#exhibitaButton').removeClass('disabled').attr('disabled', false); }); 国家 从jQuery1.7开始,.on()方法是将事件处理程序附加到文档的首选方法。对于早期版本,.bind()方法用于

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

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

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

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

我想我可以把代码改写为:

$(document).on('hastext', '#exhibita', function () {
  $('#exhibitaButton').removeClass('disabled').attr('disabled', false);
});
但事件处理程序从未被触发

问题

  • 我在()上使用
    时出错了吗
  • 提供自定义事件的代码必须重写以支持()上的
    ?如果是这样,有什么必须改变的
  • bind()
    是否被记录为jQuery未来版本中删除的候选对象?我在文档中没有看到折旧警告,但我知道
    live()
    die()
    已从1.9中删除
  • 是否有一种未来的方法可以在不重写代码的情况下使用这些自定义事件

您在上使用
的方式正在创建更公平的授权。这基本上相当于旧的jquery
live

此自定义事件可能无法正常冒泡。请尝试以下方法:

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

如果bind起作用,这将起作用。

您在
上使用的
方法是创建甚至是委托。这基本上相当于旧的jquery
live

此自定义事件可能无法正常冒泡。请尝试以下方法:

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

如果bind起作用,这将起作用。

非授权版本正在起作用。有没有想过为什么自定义事件可能无法正确冒泡,或者如何解决这个问题?我认为它更类似于旧的.delegate,但我可能错了。.live确实是这样工作的吗?@freshyeball因为
document
被用作第一个选择器,所以它与
live
相同。如果使用任何其他选择器代替
文档
,则该选择器与
委托
相同
delegate
也可以用
document
调用,在这种情况下,它也相当于
live
。@EricJ。不太确定。它可能与插件的内部结构有关,甚至可能与您自己的代码有关。确保层次结构中的某个位置没有重新运行false或调用
event.stopPropagation
的处理程序。您可以在一个页面上测试这个问题,只需
#exhibita
,看看是您的代码还是插件导致了问题。@JamesMontagne正是我所想的。非授权版本正在工作。有没有想过为什么自定义事件可能无法正确冒泡,或者如何解决这个问题?我认为它更类似于旧的.delegate,但我可能错了。.live确实是这样工作的吗?@freshyeball因为
document
被用作第一个选择器,所以它与
live
相同。如果使用任何其他选择器代替
文档
,则该选择器与
委托
相同
delegate
也可以用
document
调用,在这种情况下,它也相当于
live
。@EricJ。不太确定。它可能与插件的内部结构有关,甚至可能与您自己的代码有关。确保层次结构中的某个位置没有重新运行false或调用
event.stopPropagation
的处理程序。您可以在一个页面上测试这个问题,只需
#exhibita
,看看是您的代码还是插件导致了这个问题。@JamesMontagne正是我所想的。