如何获得jquery .val()AFTER按键事件?

时间:2010-06-17 16:06:57

标签: javascript jquery events forms javascript-events

我得到了:

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

现在警报总是在按键前返回值(例如,字段为空,我输入'a',警报给我''。然后我输入'b',警报给我'a'...... )。但我希望按键后的值 - 我该怎么做?

背景:我想在文本字段包含至少一个字符后立即启用按钮。所以我在每个按键事件上运行此测试,但使用返回的val()结果总是落后一步。使用change()事件对我来说不是一个选项,因为在您离开文本框之前按钮被禁用。如果有更好的方法,我很高兴听到它!

6 个答案:

答案 0 :(得分:141)

keypress更改为keyup

$(someTextInputField).on("keyup", function() {
  alert($(this).val());
});
按下键时会触发

keypress,释放键时会触发keyup

答案 1 :(得分:54)

很惊讶没人提到js“输入”事件:

$(someTextInputField).on('input', function() {
  alert($(this).val());
});

推荐。

https://developer.mozilla.org/en-US/docs/Web/Events/input

答案 2 :(得分:9)

而不是按键,请使用 keyup

答案 3 :(得分:5)

或者,您可以使用超时为0的keydown事件。

这样,更改将立即应用,而不是在用户停止按住键时应用。

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

答案 4 :(得分:4)

尝试这样的事情:

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

这简单地引入了一个超时,以便在“keypress”事件循环完成后,您的代码将在此后几乎立即运行。如此短的计时器间隔(即使被浏览器四舍五入)也不会引人注意。

编辑 - 或者你可以像其他人一样使用“keyup”,尽管它的语义不同。

答案 5 :(得分:4)

您可能希望挂钩onchange事件处理程序,而不是使用任何关键事件。

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

使用Edit > Paste或右键单击然后粘贴将触发更改事件,但不会触发键事件。注意某些浏览器可能会模拟粘贴上的关键事件(虽然我不知道)但您无法指望这种行为。