Best way to remove an event handler in jQuery?
我有一台
我的问题是,当用户在文本框中输入零时,我需要禁用
1 | $('#myimage').click(function { return false; }); |
jQuery≥1.7
一个jQuery 1.7起事件API已经更新,
1 2 3 4 | $('#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
在你的代码添加一个简单的例子,您需要点击事件的形象,以前的一overriding:
1 | $('#myimage').click(function() { return false; }); // Adds another click event |
然后点击get是活动的。
有人说,你可以使用AS unbind删除所有click事件:
1 | $('#myimage').unbind('click'); |
如果你想添加一个单一的事件,然后删除它(没有任何其他人可能已经删除,添加,然后你可以使用事件namespacing):
1 | $('#myimage').bind('click.mynamespace', function() { /* Do stuff */ }); |
和删除您的事件:
1 | $('#myimage').unbind('click.mynamespace'); |
这可不是什么这个问题时的回答,但你也可以使用Live()启用/禁用的同体的事件。
1 2 3 | $('#myimage:not(.disabled)').live('click', myclickevent); $('#mydisablebutton').click( function () { $('#myimage').addClass('disabled'); }); |
我想这是一个代码,当你点击它会添加# mydisablebutton,残疾人友好的一流#无关紧要的元素。这将使它这样的选择器匹配的元素不再和事件将不被开除,直到'禁用'类(删除).live作出有效的选择。
这有其他福利基于这类造型由添加为好。
这可以通过使用"unbind函数完成。
1 | $('#myimage').unbind('click'); |
你可以添加多个事件处理程序在同一个jQuery对象和事件。本均值添加一个新的取代旧的一。
有几个策略改变事件的事件处理程序,如命名空间。有一些关于这个网页的在线文档中。
看这个问题(这是我如何学会of unbind)。有一些有用的策略,在本文描述的答案。
如何读取绑定回调函数在jQuery悬停
如果你想使用一个事件只是一次,真的应该有以下的语法:
1 2 3 4 5 | $('.myLink').bind('click', function() { //do some things $(this).unbind('click', arguments.callee); //unbind *just this handler* }); |
使用arguments.callee,我们可以确保一个特异的匿名函数处理程序被删除,因此,一个给定的事件处理程序的一个单一的时间。希望这帮助他人。
也许是你想unbind方法工作
1 | $("#myimage").unbind("click"); |
我不得不设置到零的事件和属性的道具使用。我做的一个或另一个。所以不能.unbind I get to Work。我工作在TD元素。
1 | .prop("onclick", null).attr("onclick", null) |
如果事件是连接这种方式,和的目标是:unattached
1 2 3 4 5 6 7 8 9 10 | $('#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. });? |
你可以添加一个内联
1 | <input id="addreport" type="button" value="Add New Report" onclick="openAdd()" /> |
如果这样,
1 2 3 | $("#addreport").on("click","", function (e) { openAdd(); }); |
jQuery参考的话,有一个事件处理程序和CAN删除它:
1 | $("#addreport").off("click") |
这一点obliquely voidking mentions a comment以上。
到2014年。
使用jQuery的最新版本,你现在可以在命名空间的所有事件unbind通过简单的做
最佳的方式是删除
谢谢你的信息。我过去很有帮助它锁定页面交互而在另一个用户在编辑模式。我用它在一个ajaxcomplete之间。不一样的行为,但在necesarily相似。
1 2 3 4 5 6 7 8 9 10 | function userPageLock(){ $("body").bind("ajaxComplete.lockpage", function(){ $("body").unbind("ajaxComplete.lockpage"); executePageLock(); }); }; function executePageLock(){ //do something } |
对
删除所有事件处理程序意味着让普通的
1 2 3 4 5 6 | 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); |
有了这个,我们就可以让
祝你好运。。。
如果
1 2 3 | $('body').on('click', '.dynamicTarget', function () { // Code goes here }); |
但是,可以使用.undelegate()方法从事件中完全删除与当前选择器匹配的所有元素的处理程序:
1 | $("body").undelegate(".dynamicTarget","click") |
因此,这个简单的和精细的作品。easy.see http:/ / / / / jsfiddle.net uzc8w 570
1 | $('#myimage').removeAttr("click"); |
如果您通过设置你需要
如果你设置它通过jQuery(如我的例子后,先点击上面的)然后你需要
我希望下面的解释了所有的代码。HTML:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | (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); |
1 2 3 4 5 | <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"> <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> |
我知道这很晚才出现,但是为什么不使用普通JS来删除事件呢?
1 2 | var myElement = document.getElementByID("your_ID"); myElement.onclick = null; |
或者,如果将命名函数用作事件处理程序:
1 2 3 4 | function eh(event){...} var myElement = document.getElementByID("your_ID"); myElement.addEventListener("click",eh); // add event handler myElement.removeEventListener("click",eh); //remove it |
所有的方法中描述的没有工作,因为我为我的点击事件添加到文档在一个
1 2 3 | $(document).on("click",".button", function() { doSomething(); }); |
解决方案:
我
"我不.button unbind"我只是另一个类的类分配到一个按钮相同的CSS样式。因此,在做中学的生活/点击事件处理程序忽视的机会:
1 2 | // prevent another click on the button by assigning another class $(".button").attr("class","buttonOff"); |
希望这帮助。