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

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

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

当前回答

希望我下面的代码说明一切。 HTML:

(function($){ $("#btn_add").on("click",function(){ $("#btn_click").on("click",added_handler); alert("Added new handler to button 1"); }); $("#btn_remove").on("click",function(){ $("#btn_click").off("click",added_handler); alert("Removed new handler to button 1"); }); function fixed_handler(){ alert("Fixed handler"); } function added_handler(){ alert("new handler"); } $("#btn_click").on("click",fixed_handler); $("#btn_fixed").on("click",fixed_handler); })(jQuery); <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <button id="btn_click">Button 1</button> <button id="btn_add">Add Handler</button> <button id="btn_remove">Remove Handler</button> <button id="btn_fixed">Fixed Handler</button>

其他回答

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

希望这能有所帮助。

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

删除内联onclick事件的最佳方法是$(element)。道具(onclick, null);

你可以添加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在上面的评论中更间接地提到了这一点。

我今天在工作中遇到了一个与此相关的有趣案例,其中有一个$(window)的滚动事件处理程序。

// TO ELIMINATE THE RE-SELECTION AND 
//   RE-CREATION OF THE SAME OBJECT REDUNDANTLY IN THE FOLLOWING SNIPPETS
let $window = $(window);

$window.on('scroll', function() { .... });

但是,要撤销那个事件处理程序,我们不能只使用

$window.off('scroll');

因为在这个非常常见的目标上可能有其他滚动事件处理程序,我对通过关闭所有滚动处理程序来冲洗其他功能(已知或未知)不感兴趣。

我的解决方案是首先将处理程序功能抽象为一个命名函数,并在事件侦听器设置中使用它。

function handleScrollingForXYZ() { ...... }

$window.on('scroll', handleScrollingForXYZ);

然后,有条件地,当我们需要撤销它时,我这样做:

$window.off('scroll', $window, handleScrollingForXYZ);

麻烦的部分是第二个参数,它冗余地选择原始选择器。但是,.off()的jquery文档只提供了一个方法签名来指定要删除的处理程序,这要求中间的参数为

当附加事件处理程序时,选择器应该匹配最初传递给.on()的选择器。

我没有冒险用null或''作为第二个参数来测试它,但也许多余的$窗口是不必要的。