我怎样才能得到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()); });
推荐的。
而不是按键,使用键盘 。
或者,您可以使用超时时间为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它的语义是不同的。