0

我已经设置了最简单的简单事件处理函数。一切都很好,除了events.remove()IE < 9。所以,换句话说,除了删除 IE 版本中使用.detachEvent().

我一直在 IETester 和 VirtualBox 上进行测试,运行带有 IE8 的 Windows XP。

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

因为您尝试使用与绑定的功能不同的功能进行分离。

它们都是匿名函数这一事实并不重要。它们是两个不同的函数对象。

于 2013-05-25T01:28:23.047 回答