【问题标题】:How to detach event in IE 6 7 8 9 using JavaScript如何使用 JavaScript 在 IE 6 7 8 9 中分离事件
【发布时间】:2012-10-08 14:41:57
【问题描述】:

这是部分代码,不是完整版。

我有一个荧光笔,可以在鼠标悬停时突出显示特定的 html 元素。

我还有一个点击事件和监听器

我的问题是:highlighter event/listener 在使用 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");
                }

【问题讨论】:

    标签: javascript dom-events bookmarklet


    【解决方案1】:

    您需要将使用attachEvent 添加的函数传递给detachEvent。在您的代码中,您传递了一个新代码(它们具有相同的 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");:真的有这样有用的案例吗?

    【讨论】:

    • 我会尝试这个... 10x
    【解决方案2】:

    基于this article,跨浏览器事件处理程序可以是:

    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;
            }
        }
    };
    

    【讨论】:

    • 老鼠,这个 NCZ 链接不再有效,是否有其他文章或链接可以参考?
    • @Danjah 感谢提醒,这个要点:gist.github.com/objectfoo/4144898 是代码的存储库。
    猜你喜欢
    • 2011-04-01
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    • 2013-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多