Ответ 1
Измените keypress
на keyup
:
$(someTextInputField).on("keyup", function() {
alert($(this).val());
});
keypress
запускается, когда клавиша нажата, keyup
запускается при отпускании клавиши.
Я получил:
$(someTextInputField).keypress(function() {
alert($(this).val());
});
Теперь предупреждение всегда возвращает значение ПЕРЕД нажатием клавиши (например, поле пустое, я набираю "a", и предупреждение дает мне ". Затем я набираю" b ", и предупреждение дает мне" a "...). Но я хочу значение ПОСЛЕ нажатия клавиши - как я могу это сделать?
Фон: я хотел бы включить кнопку, как только текстовое поле содержит хотя бы один символ. Поэтому я запускаю этот тест на каждом событии keypress, но с использованием возвращенного val() результат всегда на один шаг назад. Использование события change() не является для меня вариантом, потому что тогда кнопка отключена, пока вы не покинете текстовое поле. Если есть лучший способ сделать это, я рад это слышать!
Измените keypress
на keyup
:
$(someTextInputField).on("keyup", function() {
alert($(this).val());
});
keypress
запускается, когда клавиша нажата, keyup
запускается при отпускании клавиши.
Удивлен, что никто не упомянул событие ввода "js":
$(someTextInputField).on('input', function() {
alert($(this).val());
});
Рекомендуется.
вместо нажатия клавиши keyup.
В качестве альтернативы вы можете использовать событие keydown с таймаутом 0.
Таким образом, изменения будут применены мгновенно, вместо того, чтобы применяться, когда пользователь перестает удерживать ключ.
$(someTextInputField).on("keydown", function() {
setTimeout(function($elem){
alert($elem.val());
}, 0, $(this));
});
Попробуйте что-то вроде этого:
$('#someField').keypress(function() {
setTimeout(function() {
if ($('#someField').val().length > 0)
$('#theButton').attr('disabled', false);
}, 1);
});
Это просто вводит тайм-аут, так что после завершения цикла событий "keypress" ваш код будет работать почти сразу после этого. Такой короткий интервал таймера (даже если он округлен браузером) не будет заметным.
edit — или вы можете использовать "keyup", как говорят все остальные, хотя его семантика отличается.
Возможно, вы захотите подключить обработчик событий onchange
вместо использования каких-либо ключевых событий.
$(someTextInputField).change(function() {
alert($(this).val());
});
Используя Edit > Paste
или щелкните правой кнопкой мыши, тогда вставка запустит событие изменения, но не ключевое событие. Обратите внимание, что некоторые браузеры могут имитировать ключевое событие на вставке (хотя я и не знаю), но вы не можете рассчитывать на это поведение.