document.getElementById('container').addEventListener('copy',beforecopy,false );
No Chrome / Safari, o acima irá executar a função "beforecopy" quando o conteúdo da página estiver sendo copiado. O MSIE também deve oferecer suporte a essa funcionalidade, mas, por algum motivo, estou recebendo este erro:
"O objeto não suporta esta propriedade ou método"
Agora, é meu entendimento que o Internet Explorer não brinca com o nó do corpo, mas eu pensei que fornecer um nó por ID funcionaria bem. Alguém tem alguma ideia sobre o que estou fazendo de errado? Desde já, obrigado.
** Pontos de bônus para quem puder me dizer para que serve o terceiro parâmetro "False".
useCapture
muito bem: coding.smashingmagazine.com/2013/11/12/…Respostas:
No IE, você deve usar
attachEvent
em vez do padrãoaddEventListener
.Uma prática comum é verificar se o
addEventListener
método está disponível e usá-lo, caso contrário, useattachEvent
:if (el.addEventListener){ el.addEventListener('click', modifyText, false); } else if (el.attachEvent){ el.attachEvent('onclick', modifyText); }
Você pode criar uma função para isso:
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'); });
Você pode executar um exemplo do código acima aqui .
O terceiro argumento de
addEventListener
éuseCapture
; se verdadeiro, indica que o usuário deseja iniciar a captura de eventos .fonte
addEventListener
then? msdn.microsoft.com/en-us/library/ie/cc197015(v=vs.85).aspxCaso você esteja usando JQuery 2.x, adicione o seguinte no
<html> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge;" /> </head> <body> ... </body> </html>
Isso funcionou para mim.
fonte
tente adicionar
<meta http-equiv="X-UA-Compatible" content="IE=edge">
logo após a tag de abertura
fonte
O Internet Explorer (IE8 e inferior) não é compatível
addEventListener(...)
. Ele tem seu próprio modelo de evento usando oattachEvent
método. Você poderia usar algum 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); }
Embora eu recomende evitar escrever seu próprio wrapper de manipulação de eventos e, em vez disso, usar uma estrutura JavaScript (como jQuery , Dojo , MooTools , YUI , Prototype , etc) e evitar ter que criar a correção para isso por conta própria.
A propósito, o terceiro argumento no modelo W3C de eventos tem a ver com a diferença entre borbulhar e capturar eventos . Em quase todas as situações, você desejará lidar com os eventos enquanto eles borbulham, não quando são capturados. É útil ao usar a delegação de eventos em coisas como eventos de "foco" para caixas de texto, que não borbulham.
fonte
A partir do IE11, você precisa usar
addEventListener
.attachEvent
está obsoleto e gera um erro.fonte
Como PPK aponta aqui , no IE, você também pode usar
e.cancelBubble = true;
fonte
Usando
<meta http-equiv="X-UA-Compatible" content="IE=9">
, o IE9 + oferece suporteaddEventListener
removendo o "on" no nome do evento, como este:var btn1 = document.getElementById('btn1'); btn1.addEventListener('mousedown', function() { console.log('mousedown'); });
fonte
O problema é que o IE não possui o
addEventListener
método padrão . O IE usa o seu próprio,attachEvent
que faz praticamente o mesmo.Uma boa explicação das diferenças e também sobre o terceiro parâmetro pode ser encontrada em quirksmode .
fonte