亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

關于this問題

?window.onload = function(){? ? ? ? ? ? ? ? ??

? ? ?// 鼠標移動改變背景,可以通過給每行綁定鼠標移上事件和鼠標移除事件來改變所在行背景色。

? ? ?var hh=document.getElementsByTagName("tr");

? ? ?for(var i=0;i<hh.length;i++)

? ? ?{ ??

? ? ? ? hh[i].onmouseover=function(){?

? ? ? ? ? ? ?this.style.backgroundColor= "#f2f2f2";

? ? ? ? }

? ? ? ? ?hh[i].onmouseout=function(){?

? ? ? ? ? ?this.style.backgroundColor= "#fff";

? ? ? ? }? ? ? } ?}

為什么這段代碼里,改背景色時用this就成功了,可是用??hh[i]不行?

正在回答

3 回答

這個問題,如果你js基礎不好或剛入門的話,給你解釋估計你也會難于理解。。我試著解釋一下吧,理解了更好,不理解你再問我。。

window.onload?=?function(){??????????????????
?????//?鼠標移動改變背景,可以通過給每行綁定鼠標移上事件和鼠標移除事件來改變所在行背景色。
?????var?hh=document.getElementsByTagName("tr");
?????for(var?i=0;i<hh.length;i++)
?????{???
????????hh[i].onmouseover=function(){?
?????????????this.style.backgroundColor=?"#f2f2f2";
????????}
?????????hh[i].onmouseout=function(){?
???????????this.style.backgroundColor=?"#fff";
????????}??????
??????}??
}

這幾段代碼的意思是,在頁面加載完畢之后,選出來所有的tr元素,由于所有的tr元素是放在一個nodeList里(你可以認為是一個數組),所以可以循環它,來給每個tr綁定mouseover和mouseout事件。。

這些你肯定都理解。。

那為什么使用hh[i]就不行,使用this就可以了呢?

因為,循環執行的很快,一瞬間就執行完畢了,所以當你觸發mouseover和mouseout事件時,循環早就執行完畢了,執行完畢時,此時 i = hh.length,所以,你使用 hh[i] 也就是 hh[hh.length] 并不能取出任何元素(返回undefined),那么你要實現的目標“給每個tr綁定mouseover和mouseout事件”顯然是實現不了的。。


但是為什么this就可以了呢?因為不論如何,事件處理函數中的this對象始終指向每一個tr,所以它就可以。。


?



0 回復 有任何疑惑可以回復我~
#1

PDD一枚 提問者

非常感謝!有問題再問你
2015-11-25 回復 有任何疑惑可以回復我~
#2

慕男嬸 回復 PDD一枚 提問者

我解釋的你聽懂了沒?
2015-11-25 回復 有任何疑惑可以回復我~

講的很好。不過我想知道這個this指針為什么指向的是“tr”

1 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
JavaScript進階篇
  • 參與學習       468839    人
  • 解答問題       22582    個

本課程從如何插入JS代碼開始,帶您進入網頁動態交互世界

進入課程

關于this問題

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號