-1

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()函數中解決這個問題。

+0

爲的addEventListener *的例子檢查前有條件地使用它*,你的假設其目前的從一開始走。 –

+0

[addEventListener不能在IE8中工作]的可能的重複(http://stackoverflow.com/questions/9769868/addeventlistener-not-working-in-ie8) – Pinal

回答

3

您已錯誤地複製。請仔細查看this的答案。你的代碼必須是這樣的:

(function hideOverlayOnEsc(){ 
    // IE8 Fix 
    if(document.addEventListener){ 
     document.addEventListener('keydown', function(e){ 
      if(e.keyCode == '27'){ 
       cmnOverlayV2.hideOverlay(); 
      } 
     }, false); 
    } else { 
     document.attachEvent("onkeydown", function(e){ 
      if(e.keyCode == '27'){ 
       cmnOverlayV2.hideOverlay(); 
      } 
     }); 
    } 
})(); 
+0

我看,我沒有注意到,現代瀏覽器等效也是部分的if語句。讓我看看現在是否解決了這個問題 –

+0

是的,這樣做!愚蠢的錯誤。感謝您如此快速地向我指出:) –