this.style.backgroundColor don'我不在IE7/8工作

this.style.backgroundColor don't work in IE7/8

本文关键字:IE7 工作 backgroundColor style don this      更新时间:2023-09-26

我的代码是:

<!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、FireFox和ie9中运行良好,但在IE7/8 中无法运行

错误消息是:无法设置"backgroundColor"的属性值:对象为null或未定义

荣跟我有什么关系?

在IE中使用attachEvent时,this设置为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被设置为事件的源对象,并且事件处理程序的参数是事件对象。

this未绑定到IE的attachEvent中的源元素。

请改用event.srcElement

还要注意,event全局对象属性及其srcElement属性也是IE特定的。