剛學到js中的dom,我要用迴圈把5個按鈕變為紅色,為什麼不行,一定要用this?

時間 2021-05-05 17:29:19

1樓:蔡帥哥

我也來湊下熱鬧

var but = document.getElementsByTagName("input"for (var i = 0; i < but.length; ifunction (ibut[i].

onclick = functionbut[i].value = "哈哈"but[i].style.

backgroundColor = 'red'i

關鍵字立即執行函式閉包

2樓:馬卍

最好的辦法就是不要用for迴圈啊!應該用函式閉包作用域。

Array.from(btn).forEach(b=>b.onclick=()=>{

b.style.backgroundColor="red"

3樓:Super丶Mario

for迴圈是同步的 onclick是非同步的當onclick發生的時候 for迴圈已經結束很久了,i也就不存在了,當然拿不到資料

4樓:

click 事件是非同步事件,click 函式是以非同步方式進行呼叫,事件觸發時 for 迴圈已經結束,i = 5,所以 btn[i] 就是 btn[5]。那為什麼外層的 btn[i] 正常呢?因為這裡是同步執行,依次給每個 input 新增事件。

this 可以是因為 this 指代當前的物件。

5樓:Jett Lee

如果你知道 js 是怎樣執行的就很好了解,i是定義在全域性上的,所以每次函式入棧時都會改變i,函式出棧執行時全部都拿取i的最終結果。

所以需要改變i為區域性變數跟函式一起入棧就正常了

6樓:Song Yukino

犯了乙個基礎性錯誤:i 沒有被定義

在這種情況下,i 被自動建立到了全域性,且可以被隨意修改,當前 i 並不存在於閉包中,所以在每次迴圈時都會被修改。而當你呼叫 btn[i] 的時候,i 早已不是註冊 onclick 時的值了,當然沒法修改。

看題主的情況,應該拿到了乙份比較老舊的教材,裡面還在講解 ES5 時代的內容。題主可以了解一下 ES6 ,在 ES6 中使用 let 初始化變數就可以輕鬆避免在迴圈中變數被覆蓋的問題了。

剛畢業的我性格內向喜歡獨處要怎麼融入社會

第十五號序曲 我的建議是,先什麼也不要做。Watch the way how people live,then learn from it。 短頭髮的周老師 性格內向的人,一般而言觀察力和邏輯能力都比較強,每個人都有自己的長處,發揮長處到極致就會發光,不用融入也會吸引別人過來 找到適合你的圈子,適合...

我到底要怎麼處理戀愛中的心態

圍城夜話 個人建議謹慎閱讀自主抉擇 你們在客觀上不合適 除非覺得無人陪伴是無可厚非的事情 有些人可以做到有些人怎麼也做不到 理解不代表能接受 乙個是理性層面乙個是感性層面 不是一回事 如果一直有強烈的不滿就分手 伊姐姐 由於你們雙方所處的社會地位不同,乙個是大學生,乙個又是上班族,所以不管是時間上還...

我剛入職不就,在銀行要當櫃員,有什麼好的基礎理論書嗎?

can dun 建議去考 銀行從業資格 證書,證書雖然沒有含金量,但能讓你對銀行總體業務掃盲。不過建議現在多跟老員工請教在支行的發展路徑,結合自身情況是走客戶經理路線還是會計路線。還有多跟分行人力資源部的同事搞好關係,當分行有新崗位騰出來的時候,你能第一時間知道訊息。 兔子姐姐 想好走什麼路線?1....