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();
и др.
Любые указатели очень ценятся.
Ответы
Ответ 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...");
});