0

最も単純なイベント ハンドラー関数をセットアップしました。events.remove()IE < 9を除いて、すべてがうまく機能します。つまり、 .detachEvent().

Windows XP と IE8 を実行している IETester と VirtualBox でテストを行っています。

events = {
    add: (function () {
        if (document.documentElement.addEventListener) {
            return function (elm, type, func) {
                elm.addEventListener(type, func, false);
            };
        } else if (document.documentElement.attachEvent) {
            return function (elm, type, func) {
                elm.attachEvent('on' + type, function () {
                    func.call(elm, window.event);
                });
                elm = null; //clean up possible memory leaks?
            };
        }
    }()),
    remove: (function () {
        if (document.documentElement.removeEventListener) {
            return function (elm, type, func) {
                elm.removeEventListener(type, func, false);
            };
        } else if (document.documentElement.detachEvent) {
            return function (elm, type, func) {
                elm.detachEvent('on' + type, function () {
                    func.call(elm, window.event);
                });
                elm = null; //clean up possible memory leaks?
            };
        }
    }())
};

ここに(奇妙な)フィドルがあります

4

1 に答える 1

3

バインドされた関数とは異なる関数でデタッチしようとしているからです。

それらが両方とも無名関数であるという事実は重要ではありません。これらは 2 つの異なる関数オブジェクトです。

于 2013-05-25T01:28:23.047 に答える