У меня есть поле ввода и вы хотите настроить значение при нажатии клавиши.
'keypress .comment-input': 'onCommentInputKeyBlur',
Когда клавиша нажата, класс добавляется в элемент html для отражения изменений.
onCommentInputKeyBlur: function(ev) {
var $form = $('#comment-submit');
if (ev.which) {
$form.addClass('focused');
} else if (!$(ev.currentTarget).val()) {
$form.removeClass('focused');
}
},
Тем не менее, это не определяет нажатия специальных клавиш (т.е. Когда пользователь нажимает ctrl + v для пасты, он не обнаруживается, и поэтому неправильное форматирование).
Использование наподобие keyup и keydown разрешает проблему, но форматирование неверно в течение короткой секунды:
Keydown → значение не должно изменяться до тех пор, пока фактическое значение не будет введено нажатием клавиши, но оно изменится вправо, когда ctrl ударит, а не ждет второго ключа
Keyup → новое значение кратковременно вставляется поверх предыдущего, ожидая, что клавиша действительно будет выпущена.
Есть ли лучший способ решить это? В идеале я хотел бы определить, действительно ли введенный ключ действительно производит значение и не является просто специальным ключом.
Какова конечная цель этой функциональности? возможно, есть лучший подход.
Если вы настаиваете на этом, используя событие нажатия клавиши, вы можете просто проверить event.keyCode и отфильтровать несколько кодов клавиш, которые ничего не меняют, например shift, control, alt.
Посмотрите на событие onchange. Он довольно хорошо поддерживается и может решить вашу проблему.
keypress
запускается при каждом нажатии клавиши. Вы спрашиваете, как определить, нажал ли пользователь действительную клавишу?