2012-02-20 237 views
0

我的代碼是:this.style.backgroundColor不工作IE7/8

<!DOCTYPE html> 
<html> 
<head> 
    <title>Demo</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <style type="text/css"> 
     p{ 
      border:1px solid #CCC; 
      margin:5px; 
      padding:5px; 
     } 
    </style> 
    <script type="text/javascript"> 
     window.onload = changeColor; 
     function changeColor() { 
      for(var i =0; i < document.getElementById("main").getElementsByTagName("p").length; i++) { 
       var obj = document.getElementById("main").getElementsByTagName("p")[i]; 
       if (window.addEventListener) { 
        obj.addEventListener('mousemove', function() { 
         this.style.backgroundColor ="#EEE"; 
        }, false); 
        obj.addEventListener('mouseout', function() { 
         this.style.backgroundColor ="#FFF"; 
        }, false); 
       } else if (window.attachEvent) { 
        //for ie 
        obj.attachEvent('onmousemove', function() { 
         this.style.backgroundColor ="#EEE"; 
        }); 
        obj.attachEvent('onmouseout', function() { 
         this.style.backgroundColor ="#FFF"; 
        }); 
       } 
      } 
     } 
    </script> 
</head> 
<body> 
    <div> 
     <p>1</p> 
     <div id="main"> 
      <p>2.1</p> 
      <p>2.2</p> 
      <p>2.3</p> 
     </div> 
    </div> 
</body> 
</html> 

它在Chrome,火狐和IE9很好地工作,但在IE7中不起作用/ 8

該錯誤信息是:無法設置的「的backgroundColor」屬性值:對象爲null或undefined

什麼我榮?

回答

1

當使用IE attachEventthis被設置爲window對象,而不是到該事件發生的對象。

在IE中,全局變量window.event.srcElement將包含該事件的目標對象。

你可以像這樣,周圍的工作編寫一個讓所有的事件處理程序的工作方式相同:

function hookEvent(event, obj, fn) { 
    if (obj.addEventListener) { 
     obj.addEventListener(event, fn, false); 
    } else { 
     obj.attachEvent("on" + event, function() {return(fn.call(obj, window.event));}); 
    } 
} 

這將讓這個this設置爲事件的源對象和參數事件處理程序是事件對象。

+0

附加了輔助功能,使'的attachEvent()'工作像'的addEventListener()'。 – jfriend00 2012-02-20 05:11:07

0

this未綁定到在IE的attachEvent源元素。

使用event.srcElement代替。

另請注意,event全局對象屬性及其srcElement屬性也是特定於IE的。