第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

為什么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";
??????????? }
???? }
}

正在回答

4 回答

這是由于事件的異步執(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é)點是不存在的。

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

qq_普通人_1

"頁面加載完成后,for循環(huán)中的i已經(jīng)變?yōu)榱藅r.length",這句話怎么理解?
2015-10-18 回復 有任何疑惑可以回復我~
#2

大柏樹 回復 qq_普通人_1

假設(shè)一共有3個tr,即tr.length=3吧。方法一頁面加載時, for(var i = 0; i < tr.length; i++)這個循環(huán)開始執(zhí)行,為tr[0]的onmouseover綁定了 tr[i].style.backgroundColor = "#f2f2f2";這個背景色事件;循環(huán)繼續(xù)執(zhí)行,i變?yōu)?,為tr[1]的onmouseover綁定了 tr[i].style.backgroundColor = "#f2f2f2";這個背景色事件;一直到i變?yōu)?時,i < tr.length這個循環(huán)條件不成立,繼續(xù)執(zhí)行下面的代碼,此時變量i的值已經(jīng)變?yōu)?了。
2015-10-19 回復 有任何疑惑可以回復我~
#3

大柏樹 回復 qq_普通人_1

頁面加載完成后,此時鼠標劃過上面的任何一個tr,都會觸發(fā)這個tr的onmouseover事件,即tr[i].style.backgroundColor = "#f2f2f2",而此時的i=3,所以任何一個tr的onmouseover事件都是tr[3].style.backgroundColor = "#f2f2f2",因為只有3個tr,tr[3]指的是第四個tr,是不存在的。所以事件觸發(fā)后沒有反應,而且控制臺會報錯。如果把這句tr[i].style.backgroundColor = "#f2f2f2"改為this.style.backgroundColor = "#f2f2f2",就可以了。
2015-10-19 回復 有任何疑惑可以回復我~
#4

大柏樹 回復 qq_普通人_1

同步指的是頁面加載時,代碼依次執(zhí)行??梢哉J為頁面是瞬間加載完成的,在這之后執(zhí)行的代碼可以認為是異步。如Ajax,綁定事件,setTimeout,setInterval等。
2015-10-19 回復 有任何疑惑可以回復我~
#5

qq_普通人_1 回復 大柏樹

謝謝你的回答。有點不好理解,我再查查資料
2015-10-19 回復 有任何疑惑可以回復我~
#6

wolf3c 提問者

講的非常透徹。
2015-11-26 回復 有任何疑惑可以回復我~
#7

慕容7796276

我有一個地方不懂就是for循環(huán)結(jié)束后,每個tr[i]的事件不是已經(jīng)注冊了嗎?就是tr[0].style.backgroundColor = "#f2f2f2";這樣每個tr[i]事件都注冊了,那這時i怎么變不是應該沒關(guān)系了嗎,為什么鼠標移動的時候觸發(fā)事件的時候還要在執(zhí)行tr[i].style.backgroundColor = "#f2f2f2";這個啊,不是應該執(zhí)行如tr[0].style.backgroundColor = "#f2f2f2";這樣的
2016-11-10 回復 有任何疑惑可以回復我~
#8

Jhin_3353147 回復 慕容7796276

有同樣的疑問,不過也不是不能理解,在題主的方法一中,綁定事件里的tr[i]沒有被觸發(fā)是不會把變量i代進去的,在觸發(fā)事件的時候才把i代入,方法二中ch(obj)方法執(zhí)行了三次,每次obj都是一個明確的變量。
2016-11-28 回復 有任何疑惑可以回復我~
#9

Jhin_3353147 回復 慕容7796276

其實很簡單,只要在方法里面console tr[i]出來,就知道了。
2016-11-28 回復 有任何疑惑可以回復我~
#10

millia 回復 大柏樹

大神: for(var i = 0; i < tr.length; i++) { ch(tr[i]); } 想問一下ch(tr[i]);是什么意思啊?
2019-06-13 回復 有任何疑惑可以回復我~
查看7條回復

為什么i=3的時候循環(huán)不成立,還執(zhí)行下面的代碼?

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

Jhin_3353147

不是這樣看的。 在i<3的時候才會執(zhí)行里面的代碼,就是:為tr[i]添加綁定事件。 i=3的時候循環(huán)不成立,不執(zhí)行里面的代碼,即:不為tr[3]添加綁定事件。 但是當鼠標懸浮的時候,觸發(fā)的是已綁定過的事件,而不是很for循環(huán)里的代碼。 沒毛病
2016-11-28 回復 有任何疑惑可以回復我~

像參考答案里用this指向當前對象就行了,你那個obj也是同樣道理

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

你在第一個里面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ā)生了變化


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

wolf3c 提問者

謝謝~雖然看起來很多東西我還不了解,但是至少大概明白了自己為什么錯了。
2015-09-14 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

為什么for循環(huán)中直接使用tr[i]不可以,而將onmouseover等包含到一個函數(shù)中調(diào)用就可以了?(詳情見下面代碼)

我要回答 關(guān)注問題
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號