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

Обнаружение Ctrl + A в событии keyup

Я хочу обнаружить событие Control + A на входе. Я могу найти событие Control + A, но функция продолжается даже после return false.

jsFiddle - http://jsfiddle.net/f6rcgpmh/4/

$('.searchTerm').keyup(function(e) {

    $("#status").text("");

    if (e.ctrlKey) {
        if (e.keyCode == 65 || e.keyCode == 97) { // 'A' or 'a'
            console.log("Control pressed");
            e.preventDefault();
            return false;
        }
    }
    $("#status").text("This should not work if Ctrl + A is pressed");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="search" class="search">
    <input class="searchTerm" placeholder="Filter Books...">
    <input class="searchButton" type="submit">
</form>
<div id="status"></div>
4b9b3361

Ответ 1

Фактически функция останавливается. То, что вы испытываете, состоит в том, что запускаются два события нажатия клавиш: один из ctrl и один из A.

Первый возвращает как ожидалось, потому что он заполняет требования: ctrlKey == true и keyCode == 65 || keyCode == 97.

Но во втором случае будет нажата только одна клавиша, поэтому оба утверждения не могут быть истинными вместе:

  • Если вы в последний раз выпустили ctrl, то ctrlKey - true, а keyCode == 65 || keyCode == 97 - нет.

  • Если вы в последний раз выпустили A, то ctrlKey теперь false.

Затем выполняется строка, которая устанавливает #status сообщение об ошибке.

Ответ 2

На самом деле это не так. Вы должны изменить свое событие с 'keyup' на 'keydown'. Затем повторите попытку. Вы можете проверить эту скрипку. http://jsfiddle.net/ebilgin/f6rcgpmh/5/


Если вам нужен контроль над автозаполнением, вы должны поместить свои элементы управления перед отправкой данных.

Триггер события Key keyup вызывает вашу проблему. Я добавил еще одно условие для вашего кода,

if (e.keyCode == 17) // Ctrl key, fires at Ctrl keyup.
    return false;

Вы можете проверить мою новую скрипту, http://jsfiddle.net/ebilgin/f6rcgpmh/10/.