在jQuery中删除事件处理程序的最佳方法是什么?

我有一个input type="image" 。 这就像Microsoft Excel中的单元格笔记一样。 如果有人在input-image配对的文本框中input-image ,我为input-image设置了一个事件处理程序。 然后,当用户点击image ,他们会弹出一个小小的图标,为数据添加一些注释。

我的问题是,当用户输入一个零到文本框中,我需要禁用input-image的事件处理程序。 我尝试了以下,但无济于事。

$('#myimage').click(function { return false; });

jQuery≥1.7

使用jQuery 1.7以后,事件API已经更新, .bind() / .unbind()仍然可用于向后兼容,但首选的方法是使用on()/ off()函数。 现在下面是,

$('#myimage').click(function() { return false; }); // Adds another click event
$('#myimage').off('click');
$('#myimage').on('click.mynamespace', function() { /* Do stuff */ });
$('#myimage').off('click.mynamespace');

jQuery <1.7

在您的示例代码中,您只需向图像添加另一个单击事件,而不是覆盖前一个事件:

$('#myimage').click(function() { return false; }); // Adds another click event

这两个点击事件都会被解雇。

正如人们所说的,您可以使用解除绑定来移除所有点击事件:

$('#myimage').unbind('click');

如果您想添加一个事件然后将其删除(不删除可能已添加的其他事件),则可以使用event namespacing:

$('#myimage').bind('click.mynamespace', function() { /* Do stuff */ });

并只删除你的事件:

$('#myimage').unbind('click.mynamespace');

当这个问题得到解答时,这是不可用的,但您也可以使用live()方法来启用/禁用事件。

$('#myimage:not(.disabled)').live('click', myclickevent);

$('#mydisablebutton').click( function () { $('#myimage').addClass('disabled'); });

此代码会发生什么情况是,当您单击#mydisablebutton时,它会将禁用的类添加到#myimage元素。 这将使得选择器不再匹配元素,直到'disabled'类被移除后,事件才会被触发,使得.live()选择器再次有效。

通过添加基于该类的样式,还有其他好处。


这可以通过使用解除绑定功能来完成。

$('#myimage').unbind('click');

你可以添加多个事件处理程序到jquery中的同一个对象和事件。 这意味着添加一个新的不会取代旧的。

有几种更改事件处理程序的策略,例如事件名称空间。 在线文档中有关于此的一些网页。

看看这个问题(这就是我学会解绑的原因)。 答案中对这些策略有一些有用的描述。

如何阅读jQuery中的绑定悬停回调函数

链接地址: http://www.djcxy.com/p/14611.html

上一篇: Best way to remove an event handler in jQuery?

下一篇: JS: event listener for when element becomes visible?