Обнаружение 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>
Ответы
Ответ 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/.