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

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

關于移動鼠標的幾種寫法求人指點下

是這樣的 我開始寫關于這個鼠標移動的代碼然后寫了幾種形式發現都不能實現 一開始以為是寫錯了或者語法有誤 ?請大家看看

window.onload?=?function?shubiao(){
????????var?a=document.getElementsByTagName("tr")
?????//?鼠標移動改變背景,可以通過給每行綁定鼠標移上事件和鼠標移除事件來改變所在行背景色。
?????
???????for(i=0;i<a.length;i++){
? ? function sb(a){

tr[a].style.backgroundColor="#f2f2f2"

}

?function sq(a){

tr[a].style.backgroundColor="#fff"

}


????
???????a[i].onmouseover=sb(i)
???????a[i].onmouseout=sq(i)
???????
???????}

這種在for里面定義函數的方法感覺有問題 但是我感覺定義在for外面也不對


我后面自己在網上研究了之后得到的結果是

window.onload = function(){

? ? ? ? ? ? ? ? ??

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

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

function sb(a){

? ? return function (){

? ? ? ? ? tr[a].style.backgroundColor="#f2f2f2" ??

? ? } ??

}

? ? ? ? ? ? function sq(b){

? ? return function (){

? ? ? ? ? tr[b].style.backgroundColor="#fff" ??

? ? } ??

}

? ? ?for(i=0;i<tr.length;i++){

? ? ? ? ?tr[i].onmouseover=sb(i);

? ? ? ? ?tr[i].onmouseout=sq(i);

? ? ?}

?

}

? ? ?

請高手指點下 ?謝謝!

正在回答

1 回答

你循環了N次,sb(a)也聲明了多次……但這不是重點,重點是你以為sb(a)的a會分別根據i來賦值,每個sb都有自己的i值,但其實他們引用的都是最后一個i,因為每個sb的作用域鏈都保存著匿名函數的活動對象。

下面是用了閉包的方法,這樣每個sb(a)就會有不同的i,sb有創建了一個閉包,這個閉包保存了i值的副本,所以可以返回不同的數值。

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

mosaice 提問者

非常感謝!
2015-05-31 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

關于移動鼠標的幾種寫法求人指點下

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

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

幫助反饋 APP下載

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

公眾號

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