Как развязать специальный обработчик событий
Код:
$('#Inputfield').keyup(function(e)
{
if(e.which == 13)
{
functionXyz();
}
else
{
functionZyx();
}
});
$(document).keyup(function(exit) {
if (exit.keyCode == 27) { functionZzy(); }
});
Вопрос: Как удалить обработчик события keyup keyCode == 27 и сохранить остальные обработчики событий $(document).keyup?
Ответы
Ответ 1
Вы должны использовать именованную функцию, чтобы ссылаться на этот конкретный обработчик при вызове .unbind()
, например:
function keyUpFunc(e) {
if (e.keyCode == 27) { functionZzy(); }
}
$(document).keyup(keyUpFunc);
Затем позже при развязывании:
$(document).unbind("keyup", keyUpFunc);
Ответ 2
Вы прикрепляете обработчики событий к различным элементам, поэтому вы можете безопасно удалить обработчик из определенного объекта (уже упомянутый я знаю).
Для полноты, если вы хотите связать несколько обработчиков для одного и того же события с тем же объектом, вы можете использовать события с именами:
$('#Inputfield').bind('keyup.keep', function(e){/*...*/});
$('#Inputfield').bind('keyup.notkeep', function(e){/*...*/});
$('#Inputfield').unbind('keyup.notkeep');
// or event $('#Inputfield').unbind('.notkeep');
Так как jQuery 1.7, методы .on
и .off
- это предпочтительный способ добавления и удаления обработчиков событий. Для этой цели они ведут себя точно так же, как .bind
и .unbind
, а также работают с событиями с именами.
Ответ 3
jQuery позволяет связывать события, которые будут отключены после их первого вызова. Если вы хотите запустить эту функцию только один раз, посмотрите на метод .one(), указанный здесь: http://api.jquery.com/one/
$(document).one('keyup', function(e) {
if (e.keyCode == 27) { functionZzy(); }
});
Ответ 4
Если у вас есть только один обработчик элемента, вы можете безопасно отменить его, используя unbind
, не используя именованные функции, как предлагает Nick Craver. В этом случае вызов
$('#Inputfield').unbind('keyup');
не влияет на обработчик на document
.