第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

使用setTimeout(fn, 0)出現(xiàn)的一個(gè)奇怪的現(xiàn)象

使用setTimeout(fn, 0)出現(xiàn)的一個(gè)奇怪的現(xiàn)象

慕森王 2019-03-19 17:13:55
代碼html<p>未使用setTimeout函數(shù)</p><p id="one">    <input type="text" id="input" value="">    <span></span></p><p>使用setTimeout函數(shù)</p><p id="second">    <input type="text" id="input" value="">    <span></span></p>jsdocument.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);}現(xiàn)象
查看完整描述

7 回答

?
慕桂英546537

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

onkeydown是在用戶按下鍵盤按鍵時(shí)觸發(fā),之后是改變input的值,然后觸發(fā)onkeyup。
所以第一種情況下,回調(diào)函數(shù)里,span元素設(shè)置的是未改變的input的value值。第二種情況是setTimeout把修改span元素的操作放在本次同步事件的后面,而這時(shí)input的值已經(jīng)改變了。
如果要達(dá)到一樣的效果,可以用onkeyup代替。
demo

查看完整回答
反對(duì) 回復(fù) 2019-03-25
?
慕無忌1623718

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;


查看完整回答
反對(duì) 回復(fù) 2019-03-25
?
烙印99

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

keydown 換成 keyup 就可以了,

原因:keydown->value 改變->keyup(超過一定間隔沒有 keyup ,會(huì)繼續(xù) keydown ),setTimeout 有個(gè)最小間隔,導(dǎo)致捕獲到了改變后的 value ,沒有setTimeout 的時(shí)候,直接捕獲的是改變前的value,測(cè)試戳 demo


查看完整回答
反對(duì) 回復(fù) 2019-03-25
?
喵喔喔

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

通俗點(diǎn)說,
你輸入的內(nèi)容,并不是立刻賦值到this.value的,他存在一個(gè)棧順序。
但用了setTimeout(fn, 0)以后,fn的代碼會(huì)放到本次執(zhí)行棧的最后去執(zhí)行。

查看完整回答
反對(duì) 回復(fù) 2019-03-25
?
ibeautiful

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

首先,延遲設(shè)置為0,也不是真正意義上的無延遲;其次,執(zhí)行到 setTimeout 會(huì)加入一個(gè)單獨(dú)的隊(duì)列中執(zhí)行,這個(gè)隊(duì)列的任務(wù)在主隊(duì)列沒有執(zhí)行完畢時(shí)都不會(huì)去執(zhí)行


查看完整回答
反對(duì) 回復(fù) 2019-03-25
?
至尊寶的傳說

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


查看完整回答
反對(duì) 回復(fù) 2019-03-25
  • 7 回答
  • 0 關(guān)注
  • 733 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)