課程
/前端開發
/JavaScript
/JavaScript進階篇
在for循環中,為什么要把i值賦給oLis[i].index,然后通過this來修改className,直接用oLis[i].className="on";oDivs[i].className="";為什么不對??
2014-12-30
源自:JavaScript進階篇 10-1
正在回答
oLis[i].onclick = function()看到這句話沒,這句話的意思是給oLis中的所有元素增加點擊事件,而在事件中this就代表的這個元素
另外oLis是li元素的集合,所以在遍歷的時候需要取單個元素
yanyt 提問者
? 因為頁面一旦加載完成就觸發onload事件,而onclick事件觸發之前,for(var i= 0,len = oLis.length;i<len;i++)這個循環已經運行完成了!oLis[i].onclick = function()這段代碼只是掛在那里(掛這個詞不怎么準確,意思放在那里,等待onclick事件觸發),這時候的i=3.在 oLis[i].onclick = function()之前document.writeln(i)你會發現輸出012,說明循環已經完成.?? oLis[i].index = i 的作用只是在循環的過程中綁定下標i(0 1 2)到oLis數組相應元素oLis[0] oLis[1] oLis[2]的index變量上(例如oLis[0].index = 0;oLis[1].index =1;oLis[2].index=2)
?? 當onclick事件觸發的時候,this.className中的this就是當前鼠標所在的元素(例如家居), 同時oDivs[this.index]會獲取到家居所對應的oLis數組中的index值(這里是1,因為我們已經在完成的循環中將oLis[1]=1 了),而如果換成oLis[i]則因為i===3(恒等于3),所以oLis[i]===oLis[3],當然會出錯了!建議好好看一下JS的閉包原理和事件機制!
舉報
本課程從如何插入JS代碼開始,帶您進入網頁動態交互世界
2 回答請問為什么要用window.onload? 為什么要用this 和this.index?
2 回答為什么這里不能用list[i] 要用this
2 回答為什么要用this 而不能直接用otr[i]
1 回答沒懂,為什么要用lastchild?
1 回答不懂為什么要加 parentNode?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2014-12-30
oLis[i].onclick = function()看到這句話沒,這句話的意思是給oLis中的所有元素增加點擊事件,而在事件中this就代表的這個元素
另外oLis是li元素的集合,所以在遍歷的時候需要取單個元素
2015-03-20
? 因為頁面一旦加載完成就觸發onload事件,而onclick事件觸發之前,for(var i= 0,len = oLis.length;i<len;i++)這個循環已經運行完成了!oLis[i].onclick = function()這段代碼只是掛在那里(掛這個詞不怎么準確,意思放在那里,等待onclick事件觸發),這時候的i=3.在 oLis[i].onclick = function()之前document.writeln(i)你會發現輸出012,說明循環已經完成.
?? oLis[i].index = i 的作用只是在循環的過程中綁定下標i(0 1 2)到oLis數組相應元素oLis[0] oLis[1] oLis[2]的index變量上(例如oLis[0].index = 0;oLis[1].index =1;oLis[2].index=2)
?? 當onclick事件觸發的時候,this.className中的this就是當前鼠標所在的元素(例如家居), 同時oDivs[this.index]會獲取到家居所對應的oLis數組中的index值(這里是1,因為我們已經在完成的循環中將oLis[1]=1 了),而如果換成oLis[i]則因為i===3(恒等于3),所以oLis[i]===oLis[3],當然會出錯了!建議好好看一下JS的閉包原理和事件機制!