document.getElementById('container').addEventListener('copy',beforecopy,false );
En Chrome / Safari, lo anterior ejecutará la función "beforecopy" cuando se esté copiando el contenido de la página. Se supone que MSIE también es compatible con esta funcionalidad, pero por alguna razón recibo este error:
"El objeto no admite esta propiedad o método"
Ahora, tengo entendido que Internet Explorer no jugará con el nodo del cuerpo, pero habría pensado que proporcionar un nodo por ID funcionaría bien. ¿Alguien tiene alguna idea sobre lo que estoy haciendo mal? Gracias por adelantado.
** Puntos de bonificación para cualquiera que pueda decirme para qué sirve el tercer parámetro "Falso".
useCapture
muy bien la fase de captura : coding.smashingmagazine.com/2013/11/12/…Respuestas:
En IE tienes que usar en
attachEvent
lugar del estándaraddEventListener
.Una práctica común es verificar si el
addEventListener
método está disponible y usarlo; de lo contrario, useattachEvent
:if (el.addEventListener){ el.addEventListener('click', modifyText, false); } else if (el.attachEvent){ el.attachEvent('onclick', modifyText); }
Puedes hacer una función para hacerlo:
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'); });
Puede ejecutar un ejemplo del código anterior aquí .
El tercer argumento de
addEventListener
esuseCapture
; si es verdadero, indica que el usuario desea iniciar la captura de eventos .fuente
addEventListener
entonces? msdn.microsoft.com/en-us/library/ie/cc197015(v=vs.85).aspxEn caso de que esté utilizando JQuery 2.x, agregue lo siguiente en el
<html> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge;" /> </head> <body> ... </body> </html>
Esto funcionó para mí.
fuente
intenta agregar
<meta http-equiv="X-UA-Compatible" content="IE=edge">
justo después de la etiqueta de la cabeza de apertura
fuente
Internet Explorer (IE8 y versiones anteriores) no es compatible
addEventListener(...)
. Tiene su propio modelo de eventos usando elattachEvent
método. Podrías usar un código como este:var element = document.getElementById('container'); if (document.addEventListener){ element .addEventListener('copy', beforeCopy, false); } else if (el.attachEvent){ element .attachEvent('oncopy', beforeCopy); }
Aunque recomiendo evitar escribir su propio contenedor de manejo de eventos y en su lugar usar un marco de JavaScript (como jQuery , Dojo , MooTools , YUI , Prototype , etc.) y evitar tener que crear la solución para esto por su cuenta.
Por cierto, el tercer argumento en el modelo de eventos del W3C tiene que ver con la diferencia entre burbujear y capturar eventos . En casi todas las situaciones, querrá manejar los eventos a medida que burbujean, no cuando se capturan. Es útil cuando se usa la delegación de eventos en cosas como eventos de "enfoque" para cuadros de texto, que no aparecen.
fuente
A partir de IE11, debe usar
addEventListener
.attachEvent
está en desuso y arroja un error.fuente
Como PPK señala aquí , en IE también puede usar
e.cancelBubble = true;
fuente
El uso de
<meta http-equiv="X-UA-Compatible" content="IE=9">
IE9 + es compatibleaddEventListener
con la eliminación de "on" en el nombre del evento, así:var btn1 = document.getElementById('btn1'); btn1.addEventListener('mousedown', function() { console.log('mousedown'); });
fuente
El problema es que IE no tiene el
addEventListener
método estándar . IE usa su propioattachEvent
que hace prácticamente lo mismo.En quirksmode se puede encontrar una buena explicación de las diferencias y también sobre el tercer parámetro .
fuente