我有一个input type="image"。这类似于Microsoft Excel中的单元格注释。如果有人在与此输入图像配对的文本框中输入数字,我将为输入图像设置一个事件处理程序。然后,当用户单击图像时,他们会看到一个小弹出窗口,向数据中添加一些注释。

我的问题是,当用户在文本框中输入0时,我需要禁用输入图像的事件处理程序。我试过以下方法,但都没用。

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

当前回答

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

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

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

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

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

其他回答

删除所有事件处理程序,这对我来说是有效的:

删除所有事件处理程序意味着使用纯HTML结构,而不将所有事件处理程序附加到元素及其子节点。为此,jQuery的clone()提供了帮助。

var original, clone;
// element with id my-div and its child nodes have some event-handlers
original = $('#my-div');
clone = original.clone();
//
original.replaceWith(clone);

这样,我们就有了一个没有事件处理程序的克隆版本来代替原始版本。

祝你好运…

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

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

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

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

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

也许解绑定方法对您有用

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

所有描述的方法对我来说都不起作用,因为我正在使用on()将单击事件添加到运行时创建元素的文档中:

$(document).on("click", ".button", function() {
    doSomething();
});

我的解决方案:

因为我无法解开“。我只是给按钮分配了另一个类,具有相同的CSS样式。通过这样做,live/on-event-handler最终忽略了点击:

// prevent another click on the button by assigning another class
$(".button").attr("class","buttonOff");

希望这能有所帮助。

2014年更新

使用最新版本的jQuery,您现在可以通过简单地执行$(“#foo”)来解除名称空间上的所有事件绑定。(“。myNamespace”);