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

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

$('#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');

其他回答

我知道这来晚了,但为什么不使用纯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

如果事件以这种方式附加,目标将被解除附加:

$('#container').on('click','span',function(eo){
    alert(1);

    $(this).off(); //seams easy, but does not work

    $('#container').off('click','span'); //clears click event for every span

    $(this).on("click",function(){return false;}); //this works.

});​

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');

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

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

如果你通过html设置onclick,你需要removeAttr($(this).removeAttr('onclick'))

如果你通过jquery设置它(就像我上面例子中的第一次点击之后),那么你需要unbind($(this).unbind('click'))