Подтвердить что ты не робот

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();

и др.

Любые указатели очень ценятся.

4b9b3361

Ответ 1

Такая же ссылка на объект jQuery будет находиться в $btn и namedHandler. Оба возвращают ссылку на одно и то же, поэтому задание присваивает одно и то же.

Вы можете повернуть его off() любым способом.

Что может быть более подходящим для вашего примера, это namespacing ваше событие, поэтому off('click', ...) не отменит все события click.

Ответ 2

Вы также можете сделать это

function handleClick(event) 
{
    // code
}

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

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

Некоторые полезные примеры только о включении/выключении здесь.

Ответ 3

В дополнение к тому, что сказал @alex и @WereWolf, я часто считаю это полезным:

Для одного обработчика события используйте .one() вместо .on(), за которым следует .off()

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

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

Ответ 4

Вы можете определить функцию для вашего обработчика и передать ее в .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...");
});