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

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

改變背景色的問題

var?trs?=?document.getElementsByTagName("tr");
????????changeColor(trs);?????
?????????????
????????//循環在里面
?????function?changeColor(trs){
????????????for(var?i=0;i<trs.length;i++){
????????????????var?tr?=?trs[i];
????????????????tr.onmouseover?=?function(){
????????????????????tr.style.backgroundColor?=?"#f2f2f2";
????????????????}
????????????????tr.onmouseout?=?function(){
????????????????????tr.style.backgroundColor?=?"#fff";
????????????????}
????????????}
????????????
?????}
var?trs?=?document.getElementsByTagName("tr");
????????//循環在外面
????????for(var?i=0;i<trs.length;i++){
????????????????changeColor(trs[i]);
????????????}???????????
?????function?changeColor(tr){
????????????tr.onmouseover?=?function(){
????????????????tr.style.backgroundColor?=?"#f2f2f2";
????????????}
????????????tr.onmouseout?=?function(){
????????????????tr.style.backgroundColor?=?"#fff";
????????????}???????????
?????}

循環在里面始終只有最后一行會有改背景色的效果,而循環在外面3行都有。為什么?

正在回答

2 回答

大哥,差點被你坑了一把,害的我都開始懷疑人生了。。。。

你這是沒有考慮到tr的作用域呀。。。。。。。。。。。。。。

??//循環在里面

?????function?changeColor(trs){

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

????????????????var?tr?=?trs[i];

????????????????tr.onmouseover?=?function(){

????????????????????tr.style.backgroundColor?=?"#f2f2f2";//當事件觸發時for循環早就結束了,tr也變成了最后一個tr了

????????????????????????????????????????????????????????????????????????????????//肯定改變的是最后一個呀

????????????????}

????????????????tr.onmouseout?=?function(){

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

????????????????}

????????????}

?????}

===============================

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

????????//循環在外面

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

????????????????changeColor(trs[i]);

????????????}???????????

?????function?changeColor(tr){

????????????tr.onmouseover?=?function(){

????????????????tr.style.backgroundColor?=?"#f2f2f2";//事件觸發了,for循環也結束了,但這里的tr只是個形參

????????????????//,不是for循環里面的那個tr,作用域只是這個匿名函數

????????????}

????????????tr.onmouseout?=?function(){

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

????????????}???????????

?????}

總結就是,前者的tr都是同一個,而后者的tr不是同一個,當全局變量跟局部變量重名時,局部變量會覆蓋掉全局變量,關于這一點,可以看看這里全局變量和局部變量

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

NameZ 提問者

感謝!我也不想坑你的呀!
2016-03-10 回復 有任何疑惑可以回復我~
#2

格拉墨

循環在里面的時候, var tr = trs[i]; tr.onmouseover = function(){ tr.style.backgroundColor = "#f2f2f2"; },這里面=號前后兩個tr不相等,后面tr一直等于變量tr的最后一個值,即trs[2]。
2016-04-14 回復 有任何疑惑可以回復我~
#3

格拉墨 回復 格拉墨

所以循環在里面的時候,你鼠標不管移到哪行,都是最后一行觸發
2016-04-14 回復 有任何疑惑可以回復我~
#4

格拉墨

這個應該是JS的閉包問題,所以tr.onmouseover = function(){ this.style.backgroundColor = "#f2f2f2"; }就正常了
2016-04-14 回復 有任何疑惑可以回復我~
查看1條回復

不對吧,循環在里面,tr改成this就正常了

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

舉報

0/150
提交
取消

改變背景色的問題

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

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

幫助反饋 APP下載

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

公眾號

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