2012-10-18 44 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 –