События клавиатуры jQuery
Используя jQuery, я хотел бы захватить событие клавиатуры, которое:
- перед тем, как пользователь поднимет свой палец с клавиши
- после того, как символы из события клавиатуры зарегистрировались в поле ввода.
Чтобы прояснить, просмотрите этот пример. Когда keypress
срабатывает, значение input
еще не обновлено.
[изменить]
По-видимому, я не понимал, что мне нужно.
Функция должна быть вызвана до, пользователь поднимает свой палец вверх от клавиши, но после ключевой символ помещается в поле ввода. Таким образом, следующее не работает:
- keydown: в событии
keypress
значение в текстовом поле не обновлено
- keypress: при событии
keypress
значение в текстовом поле не обновлено
- keyup: это вызывается, когда пользователь поднимает палец, что слишком поздно.
Ответы
Ответ 1
Вы можете использовать событие input
, которое работает в последних версиях всех основных браузеров:
var input = document.getElementById("your_input_id");
input.oninput = function() {
alert(input.value);
};
К сожалению, это не работает в IE <= 8. Однако в тех браузерах, вы можете использовать propertychange
событие на value
недвижимости, а не:
input.onpropertychange = function() {
if (window.event.propertyName == "value") {
alert(input.value);
}
};
Так, обычный ответчик JavaScript @Andy E подробно рассказал об этом в своем блоге: https://web.archive.org/web/20140626060232/http://whattheheadsaid.com/2011/10/update-html5-oninput-event- плагин-для-JQuery
Ответ 2
Вы можете прослушивать событие keydown
и сохранять значение в переменной. Эта переменная будет иметь значение, как это было до нового ввода, а новый вход будет включен в событие keyup
UPDATE:
Хорошо, я неправильно понял ваши требования, но нет события, которое бы соответствовало вашим потребностям. Единственное, что я могу придумать для моделирования этого поведения, это следующее:
- слушать
keydown/keypress
- получить значение из объекта
event
(получить event.which
, а затем преобразовать его в фактическое значение)
- используйте переменную, как я упоминал в первоначальном совете, и присоединяю к ней новый вход.
Вот скрипка: http://jsfiddle.net/HpXuU/13/
Это, очевидно, не идеальное решение, так как для этого нужно какое-то (можно было бы утверждать, что это не так) работу. Я бы посоветовал переосмыслить ваши потребности, но если это поведение абсолютно необходимо, я думаю, что это шаг в правильном направлении.
Ответ 3
Используйте событие keyup, пример jsFiddle
$("textarea").keyup(function(e){
alert($(this).val());
});
Это происходит после того, как вы поднимаете ключ. Я не знаю, чего вы хотите достичь, но вы можете сохранить состояние перед тем, как поднять ключ (на keydown
или keypress
) и при необходимости восстановить позже. Вы также можете остановить вывод в событии keyup
, используя e.preventDefault()
, поэтому даже после того, как ключ поднят, он не будет регистрировать значения в области.
Ответ 4
Вы можете использовать setTimeout
:
$('input').keypress(function() {
var that = this;
setTimeout(function() {
// read that.value
}, 0);
});
Живая демонстрация: http://jsfiddle.net/HpXuU/8/