Получить значение ввода после нажатия клавиш/нажатия клавиш
У меня есть <input type="text">
, и мне нужно вызвать функцию после того, как текст в текстовом поле был изменен (в том числе действия, выполняемые во время jQuery keydown и обработчики нажатия клавиш).
Если я вызываю свою функцию из обработчика jQuery, я вижу значение (e.target.value
), как это было до добавления ввода. Поскольку я не хочу, чтобы каждый раз вручную добавлять входные данные в значение, как я могу вызвать свою функцию и использовать ее обновленное значение?
Ответы
Ответ 1
Если я понимаю вас правильно, тогда что-то вроде этого способ, которым вы можете это сделать
$('input').bind('change keydown keyup',function (){
/// do your thing here.
// use $(this).val() instead e.target.value
});
Обновлено: 03/05/13
Обратите внимание на: вам лучше использовать .on()
в качестве противопоставления .bind()
Как и в jQuery 1.7, метод .on() является предпочтительным методом привязки обработчиков событий к документу. Для более ранних версий метод .bind() используется для привязки обработчика события непосредственно к элементам. Обработчики привязаны к выбранным в данный момент элементам в объекте jQuery, поэтому эти элементы должны существовать в точке, где происходит вызов в .bind(). Для более гибкой привязки событий см. Обсуждение делегирования событий в .on() или .delegate().
Для получения дополнительной информации jQuery Bind
Ответ 2
Вы можете использовать keyup - поэтому вы вызываете его только после того, как ключ был выпущен:
$("#idofinputfield").keyup(function() {
youFunction($(this).val());
});
Ответ 3
Попробуйте
$('#target').keyup(function(){
alert($(this).val());
});
Ответ 4
если вам нужно связать элемент вверх в иерархии, вы можете подписаться на событие keyUp в обработчике keyDown.
$("#container").keydown(function (e) {
//here you decide whether to handle the key event, and grab the control that sent the event
var myInput = e.target;
$("#container").one('keyup', function() {
console.log(myInput.val());
// do smth here
});
});
Ответ 5
Вы должны использовать event.key, чтобы получить текущее значение ввода , прежде чем оно будет отображаться в текстовом поле.
Вот код.
function validate()
{
document.getElementById("divOutput").innerHTML = event.key;
//I am here returning false so that you can see that this value is being entered before the text is input. This is very useful for number validation purposes.
return false;
}
Enter Number: <input type="text" id="txtInput" onkeydown="return validate()" /><br />
You Entered <div id="divOutput"></div>
Ответ 6
Вы можете сгенерировать будущее значение, заняв позицию, в которую будет вставлен новый символ:
$('input').bind('keypress',function (){
var value = e.target.value,
idx = e.target.selectionStart,
key = e.key;
value = value.slice(0, idx) + key + value.slice(idx + Math.abs(0));
return yourfunction(value);
});