慕尼黑0610541
2016-10-08 16:07:34
//這是第一種方法,效果只是最后一行變色,并且鼠標(biāo)不是移入最后一行而是前幾行也只是最后一行變色???
????
?????????var?trs?=?document.getElementsByTagName("tr");
????????
?for(var?i=1;i<trs.length;i++){
????????????var?ntr?=?trs[i];
???? ????ntr.onmouseover=function(){?ntr.style.backgroundColor="#f2f2f2";}
???? ????ntr.onmouseout=function(){?ntr.style.backgroundColor="#FFF";}
?????????}
?????????
//這是我后來有效的方法??
???????
?????????var?trs?=?document.getElementsByTagName("tr");??
???????????????
???? ?for(var?i=1;i<trs.length;i++){
???????????onevents(trs[i]);
???? }
????????function?onevents(ntr){
???? ?ntr.onmouseover=function(){?ntr.style.backgroundColor="red";}
???? ?ntr.onmouseout=function(){?ntr.style.backgroundColor="#FFF";}?????????
????????}我想請問,為什么我直接在循環(huán)里面給每個元素綁事件不行??而是要通過函數(shù)調(diào)用的方法才行??
7 回答
已采納

stone310
TA貢獻(xiàn)361條經(jīng)驗 獲得超191個贊
第一種方法,直接循環(huán)里使用onmouseover和onmouseout里面的ntr是一個定值;
這是一個異步加載過程,即瀏覽器在加載完畢時for循環(huán)已經(jīng)結(jié)束,當(dāng)觸發(fā)鼠標(biāo)移入移出事件時,i就是個定值,所以ntr也是個定值;
第二種方法,用了參數(shù)來保存當(dāng)瀏覽器加載時for循環(huán)時候的i的值,即每一個i值都被保存下來并作為參數(shù)傳給函數(shù);
瀏覽器加載完畢后,for循環(huán)里面的值其實如下:
onevents(trs[0]);??//i為0時 onevents(trs[1]);??//i為1時 //... onevents(trs[trs.length-1])??//i為trs.length-1時 //每一個i都作為參數(shù)傳遞出去
因此觸發(fā)的時候每一行變色

我不在
TA貢獻(xiàn)3條經(jīng)驗 獲得超0個贊
上面的人都講的挺好,但是不夠透徹。要理解這個你要理解
es5以及之前的js都沒有塊級作用域。
所以瀏覽器加載完后,不管你如何操作,i都是 trs.length的值。如果使用let,就不會出現(xiàn)這個問題。

瘋狂木頭人
TA貢獻(xiàn)5條經(jīng)驗 獲得超0個贊
你的循環(huán)中沒有一個判斷條件啊, ?每次調(diào)用了這個for循環(huán),都是把循環(huán)全部循環(huán)了一遍,所以不管鼠標(biāo)放在哪一行 都是最后一行變色
添加回答
舉報
0/150
提交
取消