7 回答

TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個(gè)贊
這里其實(shí) 和 setTimeout 關(guān)系不大, 是onkeydown 事件的關(guān)系,
首先 你要 了解 這個(gè)事件
onkeydown 屬性在用戶(在鍵盤上)按鍵時(shí)觸發(fā)
onkeypress 事件會(huì)在鍵盤按鍵被按下并釋放一個(gè)鍵時(shí)發(fā)生。
onkeyup 事件會(huì)在鍵盤按鍵被松開時(shí)發(fā)生。
當(dāng)用戶在第一次按下鍵的時(shí)候 其實(shí)值是空, 你可以 onkeydown 事件中 打印下 this.value;

TA貢獻(xiàn)1735條經(jīng)驗(yàn) 獲得超5個(gè)贊
通俗點(diǎn)說,
你輸入的內(nèi)容,并不是立刻賦值到this.value的,他存在一個(gè)棧順序。
但用了setTimeout(fn, 0)以后,fn的代碼會(huì)放到本次執(zhí)行棧的最后去執(zhí)行。

TA貢獻(xiàn)1993條經(jīng)驗(yàn) 獲得超6個(gè)贊

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超10個(gè)贊
document.querySelector('#one input').onkeydown = function() {
alert('one');
document.querySelector('#one span').innerHTML = this.value;
}
document.querySelector('#second input').onkeydown = function() {
alert('second1');
setTimeout(function() {
alert('second2');
document.querySelector('#second span').innerHTML = document.querySelector('#second input').value;
}, 0);
}
中間加個(gè)alert斷點(diǎn)就知道了
1.input在鍵盤按下的時(shí)候,onkeydown先執(zhí)行,再有值,獲取不到最后輸入的值
2.input在鍵盤按下的時(shí)候,onkeydown也是先執(zhí)行,然后觸發(fā)一個(gè)異步setTimeout,值出現(xiàn)了之后再執(zhí)行異步的setTimeout,所以能夠獲得最后輸入的值。
onkeydown改為onkeyup就可以解決,因?yàn)閛nkeyup是放開按鍵的時(shí)候觸發(fā)的,所以會(huì)先有值先執(zhí)行onkeyup
添加回答
舉報(bào)