如果您输入两个字符 - 例如数字'12' - 快速进入输入字段并在每个keyup事件中记录val(),我们得到两个keyup事件,但val()
两次都是12
(在我的例子中)。
$(".myInput").keyup(function(e){
console.log("val() = " + $(this).val());
});
输入“12”时的预期输出:
val() = 1
val() = 12
输入'12'时观察到的输出:
val() = 12
val() = 12
更新val()
是否存在内置延迟?这感觉就像一个bug,但我在Chrome,Safari和Firefox上看到了相同的行为。
答案 0 :(得分:2)
这是因为您在2
keyup
事件被解雇之前按1
。在释放键之前它不会触发,但您可以在释放第一个字符之前键入下一个字符。由于输入框在12
事件触发之前包含keyup
,因此val()
会在两个事件中向您报告。
答案 1 :(得分:1)
使用input
事件来跟踪输入字段的变化非常有用,它会阻止您在这种情况下的行为:
$("#testField").on('input', function(e){
$('.outputContainer').append("val() = " + $(this).val() + "m keycode = "+ e.keyCode +"\n");
});
希望这有帮助。
$(".outputContainer").html("Type a number fast in the field above \n");
$("#testField").on('input', function(e){
$('.outputContainer').append("val() = " + $(this).val() + "m keycode = "+ e.keyCode +"\n");
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="testField" type="number">
<div class="outputContainer">
test
</div>
&#13;