Как отключить событие JQuery для нажатия всего одного элемента?
На моем сайте я зарегистрировал обработчик события нажатия клавиши для всего документа.
$(document).keypress(myhandler);
И я обрабатываю клавишу "пробел" для прокрутки списка.
Проблема в том, что есть элемент <input type='text' />
, и я не хочу, чтобы клавиша "пробел" прокручивала список, когда он вводится во вход.
Я не смог найти какую-либо информацию в объекте "событие", переданном JQuery обработчику, чтобы определить, где находится источник события.
Ответы
Ответ 1
В качестве альтернативы вы можете подключить другой обработчик событий к полю ввода, а в этом обработчике остановить распространение события:
jQuery('#input-field-id').bind('keypress', function(e) {
e.stopPropagation();
});
Таким образом, вы можете оставить глобальный обработчик событий таким, какой он есть. Может быть чище.
Ответ 2
вы ищете event.target.id
, который будет идентификатором элемента, на котором было поднято событие. Поэтому внутри myhandler
вам понадобится следующее
function myhandler(e) {
if (e.target.id !== 'id of input') {
/* rest of event handler */
}
}
Ответ 3
Смотрите документы QuirksMode о порядок событий и особенно о том, как отключать события, которые зависят от браузера. Цитата:
Для полного использования кросс-браузера выполните
function doSomething(e)
{
if (!e) var e = window.event;
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
}