jquery转“on”和“off”事件处理程序

如何将“off”指令应用于命名处理程序?

var $btn = $("#theBtn"); var namedHandler = $btn.on("click", function() { //do something //then turn off }) 

我会这样把它关掉吗?

 $btn.off("click"); 

或者我可以做其他事情,现在它存储在变量中吗?

 namedHandler.off("click"); 

要么

 namedHandler.off(); 

等等

任何指针都非常赞赏。

对jQuery对象的相同引用将在$btn namedHandler 。 两者都返回对同一事物的引用,因此赋值分配相同的东西。

您可以使用任一方法将其off()

可能更适合您的示例的是命名空间事件 ,因此off('click', ...)不会解除所有 click事件的绑定。

你也可以这样做

 function handleClick(event) { // code } $('#btn').on('click', handleClick); $('#btn').off('click', handleClick); 

一些有用的例子只在这里开/关。

除了@alex和@WereWolf所说的,我经常觉得这很有用:

对于单用事件处理程序,您可以使用.one()而不是.on()后跟.on() .off()

 $( "#foo" ).one( "click", function() { alert( "This will be displayed only once." ); }); 

http://api.jquery.com/one/

您可以为处理程序定义一个函数,并将其传递给.off()以禁用该处理程序,并将.on()重新启用它。

该文档提供了实现此目的的示例

http://api.jquery.com/off/

 function aClick() { $("div").show().fadeOut("slow"); } $("#bind").click(function () { $("body").on("click", "#theone", aClick) .find("#theone").text("Can Click!"); }); $("#unbind").click(function () { $("body").off("click", "#theone", aClick) .find("#theone").text("Does nothing..."); });