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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

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

  • 方式1(無(wú)法實(shí)現(xiàn)好的效果)

window.onload = function(){
???? // 鼠標(biāo)移動(dòng)改變背景,可以通過(guò)給每行綁定鼠標(biāo)移上事件和鼠標(biāo)移除事件來(lái)改變所在行背景色。
??????? 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";
??????????? }??????

??? ?? }
}

  • 方法二(可以實(shí)現(xiàn)):

window.onload = function(){
???????????????? ?
???? // 鼠標(biāo)移動(dòng)改變背景,可以通過(guò)給每行綁定鼠標(biāo)移上事件和鼠標(biāo)移除事件來(lái)改變所在行背景色。
?? ? 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í)行造成的。方法一中給每個(gè)tr都綁定了onmouseover和onmouseout事件,頁(yè)面加載完成后,for循環(huán)中的i已經(jīng)變?yōu)榱藅r.length。而事件此時(shí)還沒(méi)有被觸發(fā),當(dāng)用戶(hù)移動(dòng)鼠標(biāo)觸發(fā)事件時(shí),事件函數(shù)中的代碼? tr[i].style.backgroundColor = "#f2f2f2";開(kāi)始執(zhí)行,而這時(shí)i的值已經(jīng)是tr.length了,tr[i]即tr[tr.length],可tr中最后一個(gè)是tr[tr.length-1],而tr[tr.length]這個(gè)節(jié)點(diǎn)是不存在的。

5 回復(fù) 有任何疑惑可以回復(fù)我~
#1

qq_普通人_1

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

大柏樹(shù) 回復(fù) qq_普通人_1

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

大柏樹(shù) 回復(fù) qq_普通人_1

頁(yè)面加載完成后,此時(shí)鼠標(biāo)劃過(guò)上面的任何一個(gè)tr,都會(huì)觸發(fā)這個(gè)tr的onmouseover事件,即tr[i].style.backgroundColor = "#f2f2f2",而此時(shí)的i=3,所以任何一個(gè)tr的onmouseover事件都是tr[3].style.backgroundColor = "#f2f2f2",因?yàn)橹挥?個(gè)tr,tr[3]指的是第四個(gè)tr,是不存在的。所以事件觸發(fā)后沒(méi)有反應(yīng),而且控制臺(tái)會(huì)報(bào)錯(cuò)。如果把這句tr[i].style.backgroundColor = "#f2f2f2"改為this.style.backgroundColor = "#f2f2f2",就可以了。
2015-10-19 回復(fù) 有任何疑惑可以回復(fù)我~
#4

大柏樹(shù) 回復(fù) qq_普通人_1

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

qq_普通人_1 回復(fù) 大柏樹(shù)

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

wolf3c 提問(wèn)者

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

慕容7796276

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

Jhin_3353147 回復(fù) 慕容7796276

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

Jhin_3353147 回復(fù) 慕容7796276

其實(shí)很簡(jiǎn)單,只要在方法里面console tr[i]出來(lái),就知道了。
2016-11-28 回復(fù) 有任何疑惑可以回復(fù)我~
#10

millia 回復(fù) 大柏樹(shù)

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

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

1 回復(fù) 有任何疑惑可以回復(fù)我~
#1

Jhin_3353147

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

像參考答案里用this指向當(dāng)前對(duì)象就行了,你那個(gè)obj也是同樣道理

0 回復(fù) 有任何疑惑可以回復(fù)我~

你在第一個(gè)里面for循環(huán)里面alert(tr[i]),會(huì)返回[object HTMLTableRowElement],HTMLTableRowElement是一個(gè)接口,這個(gè)我也不清楚,反正他不是一個(gè)正常的對(duì)象,你還可以用另一種方式驗(yàn)證他的類(lèi)型,就是你在alert(arr[2] instanceof Object),會(huì)返回false,說(shuō)明他并不是一個(gè)Object,所以第一個(gè)會(huì)調(diào)用失敗。

第二個(gè)function里面你把tr[i]當(dāng)做參數(shù)傳入,參數(shù)的類(lèi)型是any,也就是說(shuō)他可以是任意的類(lèi)型,使用的時(shí)候當(dāng)做Object使用,在這過(guò)程中參數(shù)類(lèi)型發(fā)生了變化


0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

wolf3c 提問(wèn)者

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

舉報(bào)

0/150
提交
取消

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

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

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

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