2012-02-23 127 views
1

我需要在IE6 +上工作的代碼,只是想檢查我沒有錯過支持任何瀏覽器。防止默認操作,但不要停止傳播事件

此代碼的工作原理和我已經測試IE7,FF10,谷歌瀏覽器17,但我沒有其他瀏覽器測試。我想知道是否有人已經做到了這一點,並知道密碼是什麼,有我錯過了我的代碼的任何瀏覽器支持:

if (!e) e = window.event; 

    e.returnValue = false; 

    if (e.preventDefault) e.preventDefault(); 

    return false; 
+0

用什麼方法你使用綁定事件處理程序?我在問,因爲你想在該方法中標準化事件對象,並且* not *在事件處理程序本身內部。一旦規範化,只需在事件處理程序中執行'e.preventDefault();'。 – 2012-02-23 16:49:50

+0

當然e.preventDefault()根本無法工作,因爲IE6沒有實現該方法? – Cheetah 2012-02-23 17:01:57

+0

這就是爲什麼你必須*規範化事件對象。 – 2012-02-23 17:19:32

回答

3

preventDefault()是W3C DOM 2級標準,所以應該執行由所有現代瀏覽器。

但是,IE6不是現代瀏覽器,它不實現DOM級別2或preventDefault()。與您一樣,替代IE6使用設置event.returnValuefalse。請注意,這不會影響事件冒泡(在IE6中將通過將event.cancelBubble設置爲true來完成)。因此,您的代碼應該在IE6以及所有現代瀏覽器中工作,以防止默認操作而不停止傳播。

不過我倒是重組代碼沒有設置該事件的任何屬性,如果你沒有:

if (e.preventDefault) { 
    e.preventDefault(); 
} else { 
    e.returnValue = false; 
} 
+0

+1表示能力嗅探。 – harpo 2012-02-23 17:12:38