Исключение полей формы из обработчика нажатия клавиш, назначенного телу

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

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


person wfaulk    schedule 25.10.2009    source источник


Ответы (1)


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

document.onkeypress = function(evt) {
    evt = evt || window.event;
    var target = evt.target || evt.srcElement;
    if ( !/INPUT|TEXTAREA|SELECT|BUTTON/.test(target.nodeName) ) {
        // Do stuff
    }
};
person Tim Down    schedule 25.10.2009
comment
Ну, это было слишком очевидно. Спасибо. - person wfaulk; 25.10.2009