我有一个input type="image"
。这类似于 Microsoft Excel 中的单元格注释。如果有人在文本框中input-image
此input-image
配对的数字,我为input-image
设置了一个事件处理程序。然后,当用户单击image
,他们会获得一些弹出窗口,以便为数据添加一些注释。
我的问题是当用户在文本框中输入零时,我需要禁用input-image
的事件处理程序。我试过以下,但无济于事。
$('#myimage').click(function { return false; });
在 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');
在您的示例代码中,您只需向图像添加另一个单击事件,而不是覆盖前一个:
$('#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 的方法)。答案中对这些策略有一些有用的描述。