2012-10-18 28 views
4

这是一个部分代码,而不是完整版本。如何在IE中分离事件6 7 8 9使用JavaScript

我有一个突出显示特定html元素的荧光笔,当时mouse hovers

我也有一个click event and listener

我的问题是: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 /鼠标事件/监听器:

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 event/listener:

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

回答

12

基础上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; 
     } 
    } 
}; 
+0

大鼠,这拉票链接不再有效,是否有替代产品或链接那可以提到? – danjah

+0

@Danjah感谢提醒,这个要点:https://gist.github.com/objectfoo/4144898是一个代码库。 –

2

您需要传递给detachEvent函数yo你加了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");:是否真的有这种情况下,这将是有用的?

+0

我也会有这种tryed ... 10X –