Предотвратить запуск события нажатия клавиши, когда ввод находится в фокусе - PullRequest
1 голос
/ 13 ноября 2010

В настоящее время я использую переключатель для запуска некоторого кода при нажатии клавиши.Это не точный код, но в основном это то, что я использую (это просто для краткости и простоты здесь)поле ввода находится в фокусе?

Ответы [ 3 ]

4 голосов
/ 13 ноября 2010

Я думаю, вы имеете в виду, что вы хотите сделать e.preventDefault(), только если целевой элемент не был тегом input.Вы можете сделать это следующим образом:

$(document).keydown(function(e) {
    if (e.target.nodeName.toLowerCase() !== 'input') {
        switch(e.keyCode) { 
            case 39:
                e.preventDefault();
                alert("Arrow Key");

                break;

            case 37:
                e.preventDefault();
                alert("Arrow Key");
        }
    }
});

e.target - это элемент, из которого произошло событие.В качестве альтернативы вы можете использовать API делегирования событий jQuery:

$(document).delegate(':not(input)', 'keydown', function(e) {
    switch(e.keyCode) { 
        case 39:
            e.preventDefault();
            alert("Arrow Key");

            break;

        case 37:
            e.preventDefault();
            alert("Arrow Key");
    }
});

Редактировать Обновлен мой ответ, чтобы выполнять проверки "не является вводом", а не "является входом".

1 голос
/ 25 октября 2013

Вы можете использовать document.activeElement, который возвращает текущий фокусированный элемент.

Краткий документ от MDN :

Возвращает текущий фокусированный элемент, то есть элемент, который будет получать события нажатия клавиш, если пользователь вводит их. Этот атрибут только для чтения.

То есть, чтобы предотвратить срабатывание событий нажатия клавиш, когда ввод находится в фокусе, вы можете просто игнорировать обработку событий нажатия клавиш, когда сфокусированным элементом является input

if (!$(document.activeElement).is("input"){ /* handle keystroke events here */ }
1 голос
/ 13 ноября 2010

Там может быть более элегантный способ, но я бы сделал что-то вроде этого:

var inputHasFocus = false;
$("#some_input_id").focusin(function () {
    inputHasFocus = true;
}).focusout(function () {
    inputHasFocus = false;
});

, а затем используйте это в своем выписке.

...