6

これは部分的なコードであり、完全なバージョンではありません。

マウスをホバーしたときに特定のhtml要素を強調表示する蛍光ペンがあります。

クリックイベントとリスナーもあります。

私の問題は、Internet Explorer v6 v7 v8 v9を使用しているときに、蛍光ペンイベント/リスナーが切り離されないことです。

私は何が間違っているのですか?

これは、イベントを添付してイベントリスナーを開始する方法です。

if (document.body.addEventListener) {
                        //alert(11);
                        document.body.addEventListener('mousemove', handler, false);
                    } else if (document.body.attachEvent) {
                        //alert(12);
                        var ff=function(e) {
                            return handler(e || window.event);
                        };
                        //alert(ff);
                        document.body.attachEvent('onmousemove', ff);
                    } else {
                        //alert(13);
                        document.body.onmousemove = handler;
                    }

onmousemoveこれは私が/mouseイベント/リスナーを停止する方法です:

if (document.body.removeEventListener) {
                    document.body.removeEventListener('mousemove', handler, false);
                } else if (document.body.detachEvent) {
                    document.body.detachEvent('onmousemove', function(e) {
                        return handler(e || window.event);
                    });
                } else {
                    document.body.removeAttribute("onmousemove");
                }

onclickこれは私が/clickイベント/リスナーを停止する方法です:

if (document.body.removeEventListener) {
                    document.body.removeEventListener('click', ClosetAffairHighlighter.highlightClick, false);
                } else if (document.body.detachEvent) {
                    document.body.detachEvent('onclick', ClosetAffairHighlighter.highlightClick);
                } else {
                    document.body.removeAttribute("onclick");
                }
4

2 に答える 2

14

この記事に基づいて、クロスブラウザー イベント ハンドラーは次のようになります。

var EventUtil = {
    addHandler: function(element, type, handler) {
        if (element.addEventListener) {
            element.addEventListener(type, handler, false);
        } else if (element.attachEvent) {
            element.attachEvent("on" + type, handler);
        } else {
            element["on" + type] = handler;
        }
    },
    removeHandler: function(element, type, handler) {
        if (element.removeEventListener) {
            element.removeEventListener(type, handler, false);
        } else if (element.detachEvent) {
            element.detachEvent("on" + type, handler);
        } else {
            element["on" + type] = null;
        }
    }
};
于 2012-10-18T07:52:36.103 に答える
2

detachEventで追加した関数に渡す必要がありますattachEvent。あなたのコードでは、新しいものを渡しています(それらは同じtoString()であり、同じことをしますが、同じではありません)。

ffグローバルにする必要があります

var ff;
if (document.body.addEventListener) {
    document.body.addEventListener('mousemove', handler, false);
} else if (document.body.attachEvent) {
     ff=function(e) {
          return handler(e || window.event);
     };

そして電話する

else if (document.body.detachEvent) {
     document.body.detachEvent('onmousemove', ff);
} 

古いIEのリスナーを削除します。

注:私は本当に疑問に思っていますdocument.body.removeAttribute("onclick");: 本当にこれが役に立つ場合はありますか?

于 2012-10-18T07:48:23.580 に答える