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

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

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

当前回答

你可以添加onclick处理程序作为内联标记:

<input id="addreport" type="button" value="Add New Report" onclick="openAdd()" />

如果是这样,jquery .off()或.unbind()将不起作用。你需要在jquery中添加原始的事件处理程序:

$("#addreport").on("click", "", function (e) {
   openAdd();
});

然后jquery有一个事件处理程序的引用,可以删除它:

$("#addreport").off("click")

VoidKing在上面的评论中更间接地提到了这一点。

其他回答

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

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

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

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

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

我知道这来晚了,但为什么不使用纯JS删除事件?

var myElement = document.getElementById("your_ID");
myElement.onclick = null;

或者,如果你使用一个命名函数作为事件处理程序:

function eh(event){...}
var myElement = document.getElementById("your_ID");
myElement.addEventListener("click",eh); // add event handler
myElement.removeEventListener("click",eh); //remove it

我必须使用道具和attr将事件设置为null。我不能只选一个。我也无法摆脱工作的束缚。我正在做TD元素。

.prop("onclick", null).attr("onclick", null)

如果你使用$(document).on()向动态创建的元素添加监听器,那么你可能必须使用以下方法来删除它:

// add the listener
$(document).on('click','.element',function(){
    // stuff
});

// remove the listener
$(document).off("click", ".element");

如果.on()方法之前与特定选择器一起使用,如下例所示:

$('body').on('click', '.dynamicTarget', function () {
    // Code goes here
});

unbind()和.off()方法都不能工作。

然而,.undelegate()方法可用于完全从事件中删除与当前选择器匹配的所有元素的处理程序:

$("body").undelegate(".dynamicTarget", "click")