為什么for循環(huán)中直接使用tr[i]不可以,(詳情見下面代碼)
為什么for循環(huán)中直接使用tr[i]不可以
window.onload = function(){
???? // 鼠標(biāo)移動(dòng)改變背景,可以通過給每行綁定鼠標(biāo)移上事件和鼠標(biāo)移除事件來改變所在行背景色。
??????? var tr = document.getElementsByTagName("tr");
??????? for(var i = 0; i < tr.length; i++)
??????? {
???????????tr[i].onmouseover=function()
??????????? {
??????????????? tr[i].style.backgroundColor = "#f2f2f2";
??????????? }
??????????? tr[i].onmouseout=function()
??????????? {
??????????????? tr[i].style.backgroundColor = "#fff";
??????????? }??????
??? ?? }
}
這是別人的代碼,但我的問題和他有點(diǎn)不一樣,這是別人回答他:
這是由于事件的異步執(zhí)行造成的。方法一中給每個(gè)tr都綁定了onmouseover和onmouseout事件,頁面加載完成后,for循環(huán)中的i已經(jīng)變?yōu)榱藅r.length。而事件此時(shí)還沒有被觸發(fā),當(dāng)用戶移動(dòng)鼠標(biāo)觸發(fā)事件時(shí),事件函數(shù)中的代碼? tr[i].style.backgroundColor = "#f2f2f2";開始執(zhí)行,而這時(shí)i的值已經(jīng)是tr.length了,tr[i]即tr[tr.length],可tr中最后一個(gè)是tr[tr.length-1],而tr[tr.length]這個(gè)節(jié)點(diǎn)是不存在的。
我的問題是:
就是for循環(huán)結(jié)束后,每個(gè)tr[i]的事件不是已經(jīng)注冊(cè)了嗎?就是tr[0].style.backgroundColor = "#f2f2f2";這樣每個(gè)tr[i]事件都注冊(cè)了,那這時(shí)i怎么變不是應(yīng)該沒關(guān)系了嗎,為什么鼠標(biāo)移動(dòng)的時(shí)候觸發(fā)事件的時(shí)候還要在執(zhí)行tr[i].style.backgroundColor = "#f2f2f2";這個(gè)啊,不是應(yīng)該執(zhí)行如tr[0].style.backgroundColor = "#f2f2f2";這樣的,執(zhí)行的是注冊(cè)的事件嗎?
2016-11-14
似乎有點(diǎn)明白,似乎不明白。。。我也是那樣寫的,怎么都行不通。。。把方法單獨(dú)寫到一個(gè)方法就OK,這感覺就像是這語言有點(diǎn)ZZ
2016-11-10
電腦有毒,鑒定完畢
2016-11-10
你得理解不對(duì),每個(gè)tr[i]事件確實(shí)注冊(cè)了,但是只是注冊(cè)到?tr[i].onmouseover=function()這一步,具體事件內(nèi)容還是要等觸發(fā)的時(shí)候再去獲取
2016-11-10
怎么沒人回答我的,跪求解答