我有一个input type="image"。这类似于Microsoft Excel中的单元格注释。如果有人在与此输入图像配对的文本框中输入数字,我将为输入图像设置一个事件处理程序。然后,当用户单击图像时,他们会看到一个小弹出窗口,向数据中添加一些注释。
我的问题是,当用户在文本框中输入0时,我需要禁用输入图像的事件处理程序。我试过以下方法,但都没用。
$('#myimage').click(function { return false; });
我有一个input type="image"。这类似于Microsoft Excel中的单元格注释。如果有人在与此输入图像配对的文本框中输入数字,我将为输入图像设置一个事件处理程序。然后,当用户单击图像时,他们会看到一个小弹出窗口,向数据中添加一些注释。
我的问题是,当用户在文本框中输入0时,我需要禁用输入图像的事件处理程序。我试过以下方法,但都没用。
$('#myimage').click(function { return false; });
当前回答
我必须使用道具和attr将事件设置为null。我不能只选一个。我也无法摆脱工作的束缚。我正在做TD元素。
.prop("onclick", null).attr("onclick", null)
其他回答
在回答这个问题时,这是不可用的,但您也可以使用live()方法来启用/禁用事件。
$('#myimage:not(.disabled)').live('click', myclickevent);
$('#mydisablebutton').click( function () { $('#myimage').addClass('disabled'); });
当您单击#mydisablebutton时,这段代码将会发生什么,它将把禁用类添加到#myimage元素中。这将使选择器不再匹配元素,事件将不会触发,直到'disabled'类被移除,使.live()选择器再次有效。
通过添加基于该类的样式,这还有其他好处。
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');
删除所有事件处理程序,这对我来说是有效的:
删除所有事件处理程序意味着使用纯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);
这样,我们就有了一个没有事件处理程序的克隆版本来代替原始版本。
祝你好运…
也许解绑定方法对您有用
$("#myimage").unbind("click");
谢谢你提供的信息。非常有用,我用它来锁定页面交互,而在编辑模式下的另一个用户。我将它与ajaxComplete结合使用。不一定是相同的行为,但有些相似。
function userPageLock(){
$("body").bind("ajaxComplete.lockpage", function(){
$("body").unbind("ajaxComplete.lockpage");
executePageLock();
});
};
function executePageLock(){
//do something
}