為什么for循環(huán)中直接使用tr[i]不可以,而將onmouseover等包含到一個函數(shù)中調(diào)用就可以了?(詳情見下面代碼)
方式1(無法實現(xiàn)好的效果):
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";
??????????? }??????
??? ?? }
}
方法二(可以實現(xiàn)):
window.onload = function(){
???????????????? ?
???? // 鼠標移動改變背景,可以通過給每行綁定鼠標移上事件和鼠標移除事件來改變所在行背景色。
?? ? var tr = document.getElementsByTagName("tr");
?? ? for(var i = 0; i < tr.length; i++)
?? ? {
?? ? ch(tr[i]);
?? ? }
?? ??? ?
???? function ch(obj)
???? {
????????? obj.onmouseover=function()
??????????? {
??????????????? obj.style.backgroundColor = "#f2f2f2";
??????????? }
??????????? obj.onmouseout=function()
??????????? {
??????????????? obj.style.backgroundColor = "#fff";
??????????? }
???? }
}
2015-09-16
這是由于事件的異步執(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é)點是不存在的。
2016-03-19
為什么i=3的時候循環(huán)不成立,還執(zhí)行下面的代碼?
2015-10-28
像參考答案里用this指向當前對象就行了,你那個obj也是同樣道理
2015-09-14
你在第一個里面for循環(huán)里面alert(tr[i]),會返回[object HTMLTableRowElement],HTMLTableRowElement是一個接口,這個我也不清楚,反正他不是一個正常的對象,你還可以用另一種方式驗證他的類型,就是你在alert(arr[2] instanceof Object),會返回false,說明他并不是一個Object,所以第一個會調(diào)用失敗。
第二個function里面你把tr[i]當做參數(shù)傳入,參數(shù)的類型是any,也就是說他可以是任意的類型,使用的時候當做Object使用,在這過程中參數(shù)類型發(fā)生了變化