我怎样才能得到jQuery的.val()AFTER键事件?

我有:

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

现在警报总是返回按键之前的值(例如,该字段是空的,我input'a',警报给我'',然后input'b',警报给我'a'…)。 但是我想要按键后的价值 – 我该怎么做?

背景:只要文本字段包含至less一个字符,我想启用一个button。 所以我在每个按键事件上运行这个testing,但是使用返回的val()结果总是落后一步。 使用change()事件对我来说不是一个选项,因为这个button被禁用,直到你离开文本框。 如果有更好的方法做到这一点,我很高兴听到!

keypress更改为keypress

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

当按下键时触发按键,释放键时触发键。

惊讶的是没有人提到js“input”事件:

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

推荐的。

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

而不是按键,使用键盘

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

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

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

您可能需要连接一个onchange事件处理程序,而不是使用任何关键事件。

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

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

尝试这样的事情:

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

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

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