协慌网

登录 贡献 社区

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

我有一个input type="image" 。这类似于 Microsoft Excel 中的单元格注释。如果有人在文本框中input-imageinput-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

然后两个点击事件都会被触发。

正如人们所说,你可以使用 unbind 来删除所有点击事件:

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

如果要添加单个事件然后将其删除(不删除可能已添加的任何其他事件),则可以使用事件命名空间:

$('#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()选择器再次有效。

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

这可以通过使用 unbind 函数来完成。

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

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

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

看看这个问题(这就是我学习 unbind 的方法)。答案中对这些策略有一些有用的描述。

如何在 jquery 中读取绑定的悬停回调函数