- 代码
html
<p>未使用setTimeout函数</p>
<p id="one">
<input type="text" id="input" value="">
<span></span>
</p>
<p>使用setTimeout函数</p>
<p id="second">
<input type="text" id="input" value="">
<span></span>
</p>
js
document.querySelector('#one input').onkeydown = function() {
document.querySelector('#one span').innerHTML = this.value;
}
document.querySelector('#second input').onkeydown = function() {
setTimeout(function() {
document.querySelector('#second span').innerHTML = document.querySelector('#second input').value;
}, 0);
}
现象
onkeydown是在用户按下键盘按键时触发,之后是改变input的值,然后触发onkeyup。
所以第一种情况下,回调函数里,span元素设置的是未改变的input的value值。第二种情况是setTimeout把修改span元素的操作放在本次同步事件的后面,而这时input的值已经改变了。
如果要达到一样的效果,可以用onkeyup代替。
demo