-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 был потому что фактический элемент html, который должен скрываться на Escape, не загружается в DOM изначально, и это было легко.

Этот кодовый блок функционирует должным образом (когда один из двух внутренних кодовых блоков опущен) в качестве встроенного вызова <script> или внешнего вызова .js.

html, в котором живет этот кодовый блок, вводится в DOM другого документа html. Другими словами, то, с чем я работаю, - это всего лишь часть всей страницы, которая добавляется динамически. Из-за этого, когда я говорю, что html «сломан», что на самом деле происходит, это html, который я редактирую, отсутствует в DOM родительского html-документа.

Я рассмотрел создание условных комментариев, чтобы сказать что-то вроде <!--[if IE8]>USE SCRIPT B<![endif]-->, но это сложно, потому что у меня нет доступа к разделу <head> родительского html. Я бы предпочел просто проработать это в пределах функции hideOverlayOnEsc(), если это возможно.

+0

В примере проверяется наличие addEventListener * до условно * с его использованием, если вы предполагаете, что он присутствует от get go. –

+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

Да, это так! Глупая ошибка. Спасибо, что указали мне так быстро :) –