document.getElementById('container').addEventListener('copy',beforecopy,false );
В Chrome / Safari вышеуказанное приведет к запуску функции «beforecopy» при копировании содержимого страницы. Предполагается, что MSIE также поддерживает эту функцию, но по какой-то причине я получаю такую ошибку:
«Объект не поддерживает это свойство или метод»
Насколько я понимаю, Internet Explorer не будет играть с основным узлом, но я бы подумал, что предоставление узла по идентификатору будет работать нормально. Есть ли у кого-нибудь представления о том, что я делаю не так? Заранее спасибо.
** Бонусные баллы для тех, кто может сказать мне, для чего подходит третий параметр «Ложь».
useCapture
очень хорошо объясняет этап захвата : coding.smashingmagazine.com/2013/11/12/…Ответы:
В IE нужно использовать,
attachEvent
а не стандартaddEventListener
.Обычная практика - проверить,
addEventListener
доступен ли метод и использовать его, в противном случае используйтеattachEvent
:if (el.addEventListener){ el.addEventListener('click', modifyText, false); } else if (el.attachEvent){ el.attachEvent('onclick', modifyText); }
Вы можете создать для этого функцию:
function bindEvent(el, eventName, eventHandler) { if (el.addEventListener){ el.addEventListener(eventName, eventHandler, false); } else if (el.attachEvent){ el.attachEvent('on'+eventName, eventHandler); } } // ... bindEvent(document.getElementById('myElement'), 'click', function () { alert('element clicked'); });
Вы можете запустить пример приведенного выше кода здесь .
Третий аргумент
addEventListener
ISuseCapture
; если true, это означает, что пользователь желает инициировать захват событий .источник
addEventListener
тогда? msdn.microsoft.com/en-us/library/ie/cc197015(v=vs.85).aspxЕсли вы используете JQuery 2.x, добавьте в
<html> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge;" /> </head> <body> ... </body> </html>
Это сработало для меня.
источник
попробуйте добавить
<meta http-equiv="X-UA-Compatible" content="IE=edge">
сразу после открывающего тега заголовка
источник
Internet Explorer (IE8 и ниже) не поддерживает
addEventListener(...)
. У него есть собственная модель событий, использующаяattachEvent
метод. Вы можете использовать такой код:var element = document.getElementById('container'); if (document.addEventListener){ element .addEventListener('copy', beforeCopy, false); } else if (el.attachEvent){ element .attachEvent('oncopy', beforeCopy); }
Хотя я рекомендую избегать написания собственной оболочки обработки событий и вместо этого использовать среду JavaScript (например, jQuery , Dojo , MooTools , YUI , Prototype и т. Д.) И избегать необходимости создавать исправление для этого самостоятельно.
Между прочим, третий аргумент в модели событий W3C имеет отношение к разнице между всплыванием и захватом событий . Практически в любой ситуации вы захотите обрабатывать события по мере их появления, а не в момент их захвата. Это полезно при использовании делегирования событий для таких вещей, как события «фокус» для текстовых полей, которые не всплывают.
источник
Начиная с IE11, вам нужно использовать
addEventListener
.attachEvent
устарел и вызывает ошибку.источник
Как указывает здесь PPK , в IE вы также можете использовать
e.cancelBubble = true;
источник
Использование
<meta http-equiv="X-UA-Compatible" content="IE=9">
, IE9 + делает поддержкуaddEventListener
удалением «на» во имя события, как это:var btn1 = document.getElementById('btn1'); btn1.addEventListener('mousedown', function() { console.log('mousedown'); });
источник
Проблема в том, что в IE нет стандартного
addEventListener
метода. IE использует свой собственный,attachEvent
который делает почти то же самое.Хорошее объяснение различий, а также 3-го параметра можно найти в quirksmode .
источник