Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用JavaScript分离IE 6 7 8 9中的事件_Javascript_Javascript Events_Bookmarklet - Fatal编程技术网

如何使用JavaScript分离IE 6 7 8 9中的事件

如何使用JavaScript分离IE 6 7 8 9中的事件,javascript,javascript-events,bookmarklet,Javascript,Javascript Events,Bookmarklet,这是部分代码,不是完整版本 我有一个高亮灯,当鼠标悬停时,高亮显示特定的html元素 我还有一个单击事件和侦听器 我的问题是:使用Internet Explorer时,highlighter事件/侦听器没有分离 我做错了什么 以下是我附加事件并启动事件侦听器的方式: if (document.body.addEventListener) { //alert(11); document.body.add

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

我有一个高亮灯,当鼠标悬停时,高亮显示特定的html元素

我还有一个
单击事件和侦听器

我的问题是:使用Internet Explorer时,
highlighter事件/侦听器
没有分离

我做错了什么

以下是我附加事件并启动事件侦听器的方式:

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.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;
                    }
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");
                }

您需要将随
attachEvent
添加的函数传递到
detachEvent
。在您的代码中,您正在传递一个新的(它们具有相同的
toString()
,并将执行相同的操作,但它们不相同)

您应该使用

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”)表示怀疑:这是否真的有用?

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

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

我要试试这个。。。10xRats,此NCZ链接不再处于活动状态,是否有可供参考的其他文章或链接?@Danjah感谢提醒,此要点:是代码的存储库。