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

时间:2012-03-29 02:02:50

标签: jquery events

我如何应用" off"指定处理程序的指令?

var $btn = $("#theBtn");
var namedHandler = $btn.on("click", function() {
//do something
//then turn off
})
我会把它关掉吗

$btn.off("click");

或者现在可以将其存储在变量中吗?

namedHandler.off("click");

namedHandler.off();

任何指针都非常赞赏。

4 个答案:

答案 0 :(得分:12)

你也可以这样做

function handleClick(event) 
{
    // code
}

$('#btn').on('click', handleClick);

$('#btn').off('click', handleClick);

仅关于开/关here的一些有用示例。

答案 1 :(得分:11)

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

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

可能更适合您的示例的是namespacing your event,因此off('click', ...)不会取消绑定所有 click个事件。

答案 2 :(得分:8)

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

对于单次使用的事件处理程序,您可以使用.one()代替.on(),然后使用.off()

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

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

答案 3 :(得分:2)

您可以为处理程序定义一个函数,并将其传递给.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...");
});