0

私のコードは:

<!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または未定義です

私は何がいいの?

4

2 に答える 2

1

attachEventIEで使用する場合、は、イベントが発生したオブジェクトではなく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により、がイベントのソースオブジェクトに設定され、イベントハンドラーへの引数がイベントオブジェクトになるようになります。

于 2012-02-20T03:29:20.930 に答える
0

thisIEのソース要素にバインドされていませんattachEvent

event.srcElement代わりに使用してください。

eventまた、グローバルオブジェクトプロパティとそのsrcElementプロパティもIE固有であることに注意してください。

于 2012-02-20T03:32:41.743 に答える