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

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

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

当前回答

这可以通过使用unbind函数来实现。

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

你可以在jquery中为同一个对象和事件添加多个事件处理程序。这意味着添加一个新的并不会取代旧的。

有几种策略可以更改事件处理程序,例如事件名称空间。在线文档中有几页是关于这个的。

看看这个问题(这就是我学习解绑定的方法)。答案中对这些策略有一些有用的描述。

如何阅读绑定悬停回调函数在jquery

其他回答

也许解绑定方法对您有用

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

谢谢你提供的信息。非常有用,我用它来锁定页面交互,而在编辑模式下的另一个用户。我将它与ajaxComplete结合使用。不一定是相同的行为,但有些相似。

function userPageLock(){
    $("body").bind("ajaxComplete.lockpage", function(){
        $("body").unbind("ajaxComplete.lockpage");
        executePageLock();      
    });
};  

function executePageLock(){
    //do something
}

如果你只想响应一个事件一次,下面的语法应该很有帮助:

 $('.myLink').bind('click', function() {
   //do some things

   $(this).unbind('click', arguments.callee); //unbind *just this handler*
 });

使用参数。被调用者,我们可以确保删除一个特定的匿名函数处理程序,因此,对于给定的事件只有一个时间处理程序。希望这能帮助到其他人。

所有描述的方法对我来说都不起作用,因为我正在使用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");

希望这能有所帮助。

这也很好。简单易行。参见http://jsfiddle.net/uZc8w/570/

$('#myimage').removeAttr("click");