MSIE e addEventListener problema em JavaScript?

document.getElementById('container').addEventListener('copy',beforecopy,false ); 

No Chrome / Safari, o acima irá executar a function “beforecopy” quando o conteúdo da página estiver sendo copiado. O MSIE deve suportar essa funcionalidade também, mas, por algum motivo, estou recebendo este erro:

“Objeto não suporta esta propriedade ou método”

Agora, é meu entendimento que o Internet Explorer não vai jogar com o nó do corpo, mas eu teria pensado que fornecer um nó por ID funcionaria bem. Alguém tem alguma idéia sobre o que estou fazendo errado? Desde já, obrigado.

** Pontos de bônus para quem pode me dizer para que serve o 3º parâmetro “False”.

No IE você tem que usar attachEvent ao invés do addEventListener padrão.

Uma prática comum é verificar se o método addEventListener está disponível e usá-lo, caso contrário, use attachEvent :

 if (el.addEventListener){ el.addEventListener('click', modifyText, false); } else if (el.attachEvent){ el.attachEvent('onclick', modifyText); } 

Você pode fazer uma function para fazer 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 do addEventListener é useCapture ; se verdadeiro, indica que o usuário deseja iniciar a captura de events .

Caso você esteja usando o JQuery 2.x, adicione o seguinte no

      ...   

Isso funcionou para mim.

Internet Explorer (IE8 e inferior) não suporta addEventListener(...) . Ele possui seu próprio modelo de evento usando o método attachEvent . 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 events e, em vez disso, use uma estrutura JavaScript (como jQuery , Dojo , MooTools , YUI , Prototype , etc) e evite ter que criar a correção para isso por conta própria.

A propósito, o terceiro argumento no modelo de events do W3C tem a ver com a diferença entre a formação de bolhas e a captura de events . Em quase todas as situações, você vai querer lidar com events enquanto eles borbulham, não quando são capturados. É útil ao usar a delegação de events em events como “foco” para checkboxs de texto, que não entram em bolhas.

tente adicionar

  

logo após a tag de abertura

A partir do IE11, você precisa usar addEventListener . attachEvent está obsoleto e lança um erro.

Como PPK aponta aqui , no IE você também pode usar

 e.cancelBubble = true; 

Usando , o IE9 + suporta addEventListener removendo o “on” no nome do evento, desta forma:

  var btn1 = document.getElementById('btn1'); btn1.addEventListener('mousedown', function() { console.log('mousedown'); }); 

O problema é que o IE não possui o método addEventListener padrão. IE usa seu próprio attachEvent que faz praticamente o mesmo.

Boa explicação das diferenças e também do 3º parâmetro pode ser encontrada em quirksmode .