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()
, если это возможно.
В примере проверяется наличие addEventListener * до условно * с его использованием, если вы предполагаете, что он присутствует от get go. –
Возможный дубликат [addEventListener не работает в IE8] (http://stackoverflow.com/questions/9769868/addeventlistener-not-working-in-ie8) – Pinal