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

Jör*_*yer 97 javascript forms jquery events javascript-events

我有:

$(someTextInputField).keypress(function() {
  alert($(this).val());
});
Run Code Online (Sandbox Code Playgroud)

现在警报总是在按键前返回值(例如,字段为空,我输入'a',警报给我''.然后我输入'b',警报给我'a'......).但是我想要按键后的价值 - 我怎么能这样做?

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

Hoo*_*ing 144

更改keypresskeyup:

$(someTextInputField).on("keyup", function() {
  alert($(this).val());
});
Run Code Online (Sandbox Code Playgroud)

keypress按下keyup该键时触发,当释放该键时触发.

  • 你是如何在iPhone/Android设备上完成这个的?它们不支持keyup功能. (7认同)
  • 按键的定义并不完全正确.这是keydown的定义.见http://www.quirksmode.org/dom/events/keys.html (4认同)

bil*_*oah 56

很惊讶没有人提到js"输入"事件:

$(someTextInputField).on('input', function() {
  alert($(this).val());
});
Run Code Online (Sandbox Code Playgroud)

推荐的.

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

  • 哇,这是几个未回答/错误回答SO问题的答案. (8认同)
  • 当您需要在输入字段中忽略按箭头键,移位等时,这也很棒. (4认同)
  • 这应该是2016年接受的答案! (4认同)
  • http://caniuse.com/#search=input相对好的浏览器支持。比听每个按键更好的答案。 (2认同)

Kri*_*ast 9

而不是按键,使用键盘.


Poi*_*nty 5

尝试这样的事情:

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

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

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


Dav*_*ros 5

或者,您可以使用keydown事件,并将其超时设置为0。

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

$(someTextInputField).on("keydown", function() {
  setTimeout(function($elem){
    alert($elem.val());
  }, 0, $(this));
});
Run Code Online (Sandbox Code Playgroud)