Eu criei uma caixa de seleção dinamicamente. Eu costumava addEventListener
chamar uma função ao clicar na caixa de seleção, que funciona no Google Chrome e no Firefox, mas não funciona no Internet Explorer 8 . Este é o meu código:
var _checkbox = document.createElement("input");
_checkbox.addEventListener("click", setCheckedValues, false);
setCheckedValues
é meu manipulador de eventos.
Você deve usar
attachEvent
em versões do IE anteriores ao IE9. Detecte seaddEventListener
está definido e useattachEvent
se não estiver:Observe que o IE11 será removido
attachEvent
.Veja também:
element.addEventListener
Internet Explorer legado e attachEventfonte
Esta também é uma solução simples para crossbrowser:
Em vez de 'clique' pode ser qualquer evento, é claro.
fonte
addEventListener
O terceiro argumento de é opcional de qualquer maneira, então esta pode ser uma boa solução, e é melhor do que os ramos if-else. Mas, neste caso,_checkbox
é o elemento de destino, nãowindow
. :) Então, talvez você possa criar uma função em que o destino do evento seja outro argumento.addEventListener
chamadas de elementos de destino de evento - consulte este tópico: stackoverflow.com/questions/1007340/… . Portanto, para owindow
objeto, ele funciona corretamente, mas não funciona para outros nós dentro do documento. Desta forma, o seu alias sugerido NÃO é correto para o caso mencionado na pergunta original! Qual seria a sua solução alternativa?O IE não oferece suporte
addEventListener
até a versão 9, então você tem que usarattachEvent
, aqui está um exemplo:fonte
Talvez seja mais fácil (e tem mais desempenho) se você delegar a manipulação de eventos a outro elemento, por exemplo, sua tabela
dessa forma, você terá apenas um manipulador de eventos, e isso funcionará também para elementos recém-adicionados. Isso requer jQuery> = 1,7
Caso contrário, use delegate ()
fonte
Você pode usar a função addEvent () abaixo para adicionar eventos para a maioria das coisas, mas observe que XMLHttpRequest
if (el.attachEvent)
irá falhar no IE8, porque não oferece suporte,XMLHttpRequest.attachEvent()
então você deve usar em seuXMLHttpRequest.onload = function() {}
lugar.fonte
Optei por um Polyfill rápido com base nas respostas acima:
Claro, como as respostas acima, isso não garante que
window.attachEvent
exista, o que pode ou não ser um problema.fonte
Se você usa jQuery, pode escrever:
fonte
fonte