JQuery: как выбрать все элементы, кроме input и textarea? (чтобы отключить событие keydown) - PullRequest
5 голосов
/ 14 апреля 2010

Я пытаюсь отключить клавишу возврата в моем приложении jQuery, чтобы браузер не возвращался на страницу назад. Однако я не хочу отключать его, если элемент input или textarea сфокусирован, потому что я хочу, чтобы backspace там работал правильно.

Итак, я хочу выбрать все, что не является вводом или текстовой областью.

Вот код. Проблема в том, что он срабатывает для каждого элемента, даже для ввода и текстовых полей.

    $(':not(input, textarea)').keydown(function(e) {
    if (e.keyCode === 8) {
        return false;
    }
});

Я не понимаю, почему не работает функция: not (). Есть ли лучший способ сделать это?

Обратите внимание, что если я удалю функцию: not (), она будет работать правильно. То есть он запускается только для элементов input и textarea.

РЕДАКТИРОВАТЬ: на основе принятого ответа, вот код, который работает. Я уверен, что есть лучший способ сделать это.

    $(document).keydown(function(e) {
    var element = e.target.nodeName.toLowerCase();
    if (element != 'input' && element != 'textarea') {
        if (e.keyCode === 8) {
            return false;
        }
    }
});

Ответы [ 2 ]

6 голосов
/ 14 апреля 2010

Ваша проблема в том, что событие keydown переходит от элемента <input> или <textarea> к обычному элементу, который его содержит, вызывая событие из этого элемента.

Вам необходимо проверить e.target.

3 голосов
/ 30 мая 2013

попробуйте этот код:

$("*:not(input)")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...