Как отключить событие 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();
}