我有一个input type="image"。这类似于Microsoft Excel中的单元格注释。如果有人在与此输入图像配对的文本框中输入数字,我将为输入图像设置一个事件处理程序。然后,当用户单击图像时,他们会看到一个小弹出窗口,向数据中添加一些注释。
我的问题是,当用户在文本框中输入0时,我需要禁用输入图像的事件处理程序。我试过以下方法,但都没用。
$('#myimage').click(function { return false; });
我有一个input type="image"。这类似于Microsoft Excel中的单元格注释。如果有人在与此输入图像配对的文本框中输入数字,我将为输入图像设置一个事件处理程序。然后,当用户单击图像时,他们会看到一个小弹出窗口,向数据中添加一些注释。
我的问题是,当用户在文本框中输入0时,我需要禁用输入图像的事件处理程序。我试过以下方法,但都没用。
$('#myimage').click(function { return false; });
当前回答
2014年更新
使用最新版本的jQuery,您现在可以通过简单地执行$(“#foo”)来解除名称空间上的所有事件绑定。(“。myNamespace”);
其他回答
希望我下面的代码说明一切。 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>
如果你只想响应一个事件一次,下面的语法应该很有帮助:
$('.myLink').bind('click', function() {
//do some things
$(this).unbind('click', arguments.callee); //unbind *just this handler*
});
使用参数。被调用者,我们可以确保删除一个特定的匿名函数处理程序,因此,对于给定的事件只有一个时间处理程序。希望这能帮助到其他人。
我今天在工作中遇到了一个与此相关的有趣案例,其中有一个$(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或''作为第二个参数来测试它,但也许多余的$窗口是不必要的。
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');
也许解绑定方法对您有用
$("#myimage").unbind("click");