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