Javascript 键控事件处的输入值()延迟

Javascript 键控事件处的输入值()延迟,javascript,jquery,keyup,Javascript,Jquery,Keyup,如果您在输入字段中快速键入两个字符,例如数字“12”,并在每个keyup事件中记录val(),我们会得到两个keyup事件,但val()两次都是12(在我的示例中) $(".myInput").keyup(function(e){ console.log("val() = " + $(this).val()); }); 键入“12”时的预期输出: val() = 1 val() = 12 val() = 12 val() = 12 键入“12”时观察到的输出: val() = 1 va

如果您在输入字段中快速键入两个字符,例如数字“12”,并在每个keyup事件中记录val(),我们会得到两个keyup事件,但
val()
两次都是
12
(在我的示例中)

$(".myInput").keyup(function(e){
  console.log("val() = " + $(this).val());
});
键入“12”时的预期输出:

val() = 1
val() = 12
val() = 12
val() = 12
键入“12”时观察到的输出:

val() = 1
val() = 12
val() = 12
val() = 12


更新
val()
时是否存在内置延迟?这感觉像是一个bug,但我在Chrome、Safari和Firefox上看到了相同的行为。

这是因为在
1
keyup
事件触发之前,您正在按
2
。在释放密钥之前,它不会触发,但可以在释放第一个字符之前键入下一个字符。由于在触发任一
keyup
事件之前,输入框包含
12
,这就是
val()
在这两个事件上向您报告的内容。

使用
input
事件跟踪输入字段更改非常有用,它将防止您在这种情况下的行为:

$("#testField").on('input', function(e){
   $('.outputContainer').append("val() = " + $(this).val() + "m keycode = "+ e.keyCode +"\n");
});
希望这有帮助


一小条
$(“.outputContainer”).html(“在上面的字段中快速键入一个数字\n”);
$(“#testField”)。关于('input',函数(e){
$('.outputContainer').append(“val()=”+$(this.val()+“m keycode=“+e.keycode+”\n”);
});

测试

改为收听
输入
事件->问题是,在第一个键触发
keyup
事件之前,您正在按下一个键。当然。val()在按键时发生变化。这是漫长的一周!是的,谢谢。不知何故,我忘记了输入值是在输入时更新的,而不是在keyup时更新的。有时,你会在一篇文章中意识到显而易见的事情。