Как отключить событие нажатия клавиши JQuery только для одного элемента? - PullRequest
14 голосов
/ 10 ноября 2009

На моем сайте я зарегистрировал обработчик событий нажатия клавиш для всего документа.

$(document).keypress(myhandler);

И я нажимаю клавишу «пробел» для прокрутки списка.

Проблема в том, что есть элемент <input type='text' />, и я не хочу, чтобы нажатие клавиши "пробел" прокручивало список, когда он вводится во ввод.

Я не смог найти никакой информации в объекте "event", переданном JQuery обработчику, чтобы определить, где находится источник события.

Ответы [ 3 ]

20 голосов
/ 10 ноября 2009

Кроме того, вы можете присоединить другой обработчик события к полю ввода, и в этом обработчике остановить распространение события:

jQuery('#input-field-id').bind('keypress', function(e) {
    e.stopPropagation(); 
});

Таким образом, вы можете оставить глобальный обработчик событий как есть. Может быть чище.

3 голосов
/ 10 ноября 2009

вы ищете event.target.id, который будет идентификатором элемента, на котором было инициировано событие. Так что внутри myhandler вам нужно что-то вроде следующего

function myhandler(e) {
    if (e.target.id !== 'id of input') {
        /* rest of event handler */
    }
}
1 голос
/ 10 ноября 2009

См. Документы QuirksMode о порядке событий , и особенно о том, как отключить события, которые зависят от браузера. Цитата:

Для полного кросс-браузерного опыта сделайте

function doSomething(e)
{
    if (!e) var e = window.event;
    e.cancelBubble = true;
    if (e.stopPropagation) e.stopPropagation();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...