Подтвердить что ты не робот

JQuery: как отфильтровать несимвольные ключи при событии нажатия клавиши?

Я пробовал искать, но не знаю, какие условия искать.

Я использую jQuery и хотел бы использовать событие keypress в текстовом поле, но предотвращать все непечатаемые символы (т.е. Enter, ESC, клавиши со стрелками, backspace, tab, ctrl, insert, F1 - F12 и т.д.) от запуска события.

Есть ли простой способ определить, можно ли его печатать?

Ответ: qaru.site/info/141666/...

4b9b3361

Ответ 1

Выбранный ответ для этого вопроса не является полным. Он не обрабатывает случай нажатия клавиши символа в комбинации с ключом-модификатором (например, CTRL - A).

Попробуйте, например, ввести CTRL - A с помощью firefox с помощью следующего кода. Текущий ответ будет рассматривать его как символ:

HTML:

<input placeholder="Try typing CTRL-A in Firefox" style="width: 200px"/>

JavaScript:

$("input").keypress(function (e) {
    if (e.which !== 0) {
        alert(String.fromCharCode(e.which));
    }
});

http://jsfiddle.net/4jx7v/

Примечание. Предупреждение не запускается при использовании некоторых браузеров (например, Chrome), поскольку они не запускают событие нажатия клавиши для несимметричных входов.

Лучшее решение может быть:

HTML:

<input placeholder="Try typing CTRL-A in Firefox" style="width: 200px"/>

JavaScript:

$("input").keypress(function (e) {
    if (e.which !== 0 &&
        !e.ctrlKey && !e.metaKey && !e.altKey
    ) {
        alert(String.fromCharCode(e.which));
    }
});

http://jsfiddle.net/hY5f4/

В этом случае предупреждение запускается только при нажатии A, а не CTRL - A для всех браузеров.

Ответ 2

<script>
    $("input").keypress(function (e) {
        if (e.which !== 0 &&
            !e.ctrlKey && !e.metaKey && !e.altKey) {
            alert(String.fromCharCode(e.which));
        }
    });
</script>

Кажется, отлично работает с jQuery 1.4.2, FF, IE, Chrome.

Чтобы вникать в беспорядок, который обрабатывает события JS-клавиатуры, см. Безумие JavaScript: события клавиатуры


Обновлен для фильтрации комбинаций клавиш Ctrl, Meta и Alt в соответствии с комментариями Daniel.

Ответ 3

Проверка комбинаций клавиш не будет лучшим решением во всех случаях. Например, если вы используете комбинации клавиш для ввода символа, который заблокирует событие onkeypress, если это не так.

Попробуйте здесь, и вы увидите, что это не сработает: http://jsfiddle.net/4jx7v/

(На Mac, попробуйте alt + письмо и в Windows, попробуйте alt + ряд цифровых клавиш.)

Альтернативой этому было бы просто проверить, изменилось ли входное значение с предыдущего, вы точно знаете, что что-то было напечатано.

JavaScript:

var previousValue;
$("input").keypress(function (e) {
    if (previousValue != $(this).val()) {
        alert('Something has been typed.');
    }
});

Ответ 4

Вы можете использовать регулярные выражения, такие как

$('something').keypress(function(e) {
    if(e.match(YourRegularExpressionHere)) {
        //do something
    } 
});

Это будет делать только то, что соответствует регулярному выражению.

Посмотрите на регулярные выражения. http://www.regular-expressions.info/javascript.html