我得到了:
$(someTextInputField).keypress(function() {
alert($(this).val());
});
现在警报总是在按键前返回值(例如,字段为空,我输入'a',警报给我''。然后我输入'b',警报给我'a'...... )。但我希望按键后的值 - 我该怎么做?
背景:我想在文本字段包含至少一个字符后立即启用按钮。所以我在每个按键事件上运行此测试,但使用返回的val()结果总是落后一步。使用change()事件对我来说不是一个选项,因为在您离开文本框之前按钮被禁用。如果有更好的方法,我很高兴听到它!
答案 0 :(得分:141)
将keypress
更改为keyup
:
$(someTextInputField).on("keyup", function() {
alert($(this).val());
});
按下键时会触发 keypress
,释放键时会触发keyup
。
答案 1 :(得分:54)
很惊讶没人提到js“输入”事件:
$(someTextInputField).on('input', function() {
alert($(this).val());
});
推荐。
答案 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
或右键单击然后粘贴将触发更改事件,但不会触发键事件。注意某些浏览器可能会模拟粘贴上的关键事件(虽然我不知道)但您无法指望这种行为。