Исключение полей формы из обработчика нажатия клавиш, назначенного для тела - PullRequest
3 голосов
/ 25 октября 2009

У меня есть обработчик нажатия клавиш на веб-странице, назначенной элементу body. Я действительно хочу, чтобы он был активным в любом месте веб-страницы. Или я так думал. События нажатия клавиш в текстовых формах ввода также активируют обработчик тела, что имеет смысл, но которое мне не нужно.

В идеале, я бы хотел оставить обработчик нажатий клавиш назначенным для элемента body и каким-то образом исключить только формы ввода. Есть ли способ, как я могу остановить событие на входном уровне и предотвратить его распространение на тело? (Или это даже правильный взгляд на события HTML DOM?)

1 Ответ

7 голосов
/ 25 октября 2009

Было бы проще просто проверить, какой элемент вызвал событие в вашем обработчике нажатия клавиш, и отфильтровать элементы ввода:

document.onkeypress = function(evt) {
    evt = evt || window.event;
    var target = evt.target || evt.srcElement;
    if ( !/INPUT|TEXTAREA|SELECT|BUTTON/.test(target.nodeName) ) {
        // Do stuff
    }
};
...