Drawing off the explanation provided in this example代碼,添加以下代碼到我的HTML作爲一個立即調用的函數表達式的一部分:IE8後備對的addEventListener打破了現代瀏覽器
(function hideOverlayOnEsc(){
document.addEventListener('keydown', function(e){
if(e.keyCode == '27'){
cmnOverlayV2.hideOverlay();
}
}, false);
// IE8 Fix
if(!document.addEventListener){
document.attachEvent("onkeydown", function(e){
if(e.keyCode == '27'){
cmnOverlayV2.hideOverlay();
}
});
}
})();
當應用事件監聽到文檔的這兩個版本分開使用,它們按預期工作。也就是說,如果IE8 fix
被刪除,代碼可以在其他瀏覽器中正常工作。如果addEventListener
代碼塊被刪除,它在IE8中正常工作。然而,具有這兩種代替這些碼塊的目前打破了HTML以某種方式對兩個瀏覽器類別中的至少一個(IE8 &不IE8)
參考一些額外的信息:
的document
目的是因爲在Escape上應該隱藏的實際HTML元素最初不會加載到DOM中,這是一個簡單的方法。
此代碼塊功能正確(當兩個內部代碼塊中的一個被省略時)作爲內聯<script>
調用或外部.js
文件的調用。
此代碼塊所在的html被注入到另一個html文檔的DOM中。換句話說,我正在使用的只是動態添加的整個頁面的一部分。正因爲如此,當我說html是'斷'時,實際發生的是我正在編輯的html不存在於父html文檔的DOM中。
我曾考慮設置條件註釋來說類似<!--[if IE8]>USE SCRIPT B<![endif]-->
,但這很難,因爲我無法訪問父級html的<head>
部分。如果可能的話,我寧願在hideOverlayOnEsc()
函數中解決這個問題。
爲的addEventListener *的例子檢查前有條件地使用它*,你的假設其目前的從一開始走。 –
[addEventListener不能在IE8中工作]的可能的重複(http://stackoverflow.com/questions/9769868/addeventlistener-not-working-in-ie8) – Pinal