Как я могу получить jquery.val() ПОСЛЕ события нажатия клавиши?

Я получил:

$(someTextInputField).keypress(function() {
  alert($(this).val());
});

Теперь предупреждение всегда возвращает значение ПЕРЕД нажатием клавиши (например, поле пустое, я набираю "a", и предупреждение дает мне ". Затем я набираю" b ", и предупреждение дает мне" a "...). Но я хочу значение ПОСЛЕ нажатия клавиши - как я могу это сделать?

Фон: я хотел бы включить кнопку, как только текстовое поле содержит хотя бы один символ. Поэтому я запускаю этот тест на каждом событии keypress, но с использованием возвращенного val() результат всегда на один шаг назад. Использование события change() не является для меня вариантом, потому что тогда кнопка отключена, пока вы не покинете текстовое поле. Если есть лучший способ сделать это, я рад это слышать!

Ответ 1

Измените keypress на keyup:

$(someTextInputField).on("keyup", function() {
  alert($(this).val());
});

keypress запускается, когда клавиша нажата, keyup запускается при отпускании клавиши.

Ответ 3

вместо нажатия клавиши keyup.

Ответ 4

В качестве альтернативы вы можете использовать событие keydown с таймаутом 0.

Таким образом, изменения будут применены мгновенно, вместо того, чтобы применяться, когда пользователь перестает удерживать ключ.

$(someTextInputField).on("keydown", function() {
  setTimeout(function($elem){
    alert($elem.val());
  }, 0, $(this));
});

Ответ 5

Попробуйте что-то вроде этого:

$('#someField').keypress(function() {
  setTimeout(function() {
    if ($('#someField').val().length > 0)
      $('#theButton').attr('disabled', false);
  }, 1);
});

Это просто вводит тайм-аут, так что после завершения цикла событий "keypress" ваш код будет работать почти сразу после этого. Такой короткий интервал таймера (даже если он округлен браузером) не будет заметным.

edit — или вы можете использовать "keyup", как говорят все остальные, хотя его семантика отличается.

Ответ 6

Возможно, вы захотите подключить обработчик событий onchange вместо использования каких-либо ключевых событий.

$(someTextInputField).change(function() {
    alert($(this).val());
});

Используя Edit > Paste или щелкните правой кнопкой мыши, тогда вставка запустит событие изменения, но не ключевое событие. Обратите внимание, что некоторые браузеры могут имитировать ключевое событие на вставке (хотя я и не знаю), но вы не можете рассчитывать на это поведение.