Довольно просто, последняя нажатая клавиша не входит в .value
из input
до события keyup
.
Порядок событий при нажатии клавиши:
keydown
(срабатывает не более одного раза при нажатии клавиши, клавиша доступна в event.which
, но не в .value
) keypress
(срабатывает не менее одного раза при нажатии клавиши (например,если удерживать клавишу нажатой), клавиша доступна в event.which
, но не в .value
) keyup
(срабатывает не более одного раза при нажатии клавиши, клавиша доступна в event.which
, и in .value
)
Вы можете определить, какая клавиша была нажата во время фазы keydown
или keypress
, изучив свойство which
объекта Event
и с использованием метода String.fromCharCode
.
Еще один полезный прием, который вы можете использовать, - это использовать setTimeout
, но передать значение 0
в качествезадержка.Задержка в 0
добавляет обратный вызов к задней части стека вызовов, что задерживает выполнение достаточно долго для обновления .value
.:
$("#someTextInputID").keydown(function(event){
var that = this;
setTimeout(function () {
console.log(that.value); // will record value
}, 0);
})