agregarEventListener en Internet Explorer
¿Cuál es el equivalente al Objeto Elemento en Internet Explorer 9?
if (!Element.prototype.addEventListener) {
Element.prototype.addEventListener = function() { .. }
}
¿Cómo funciona en Internet Explorer?
Si hay una función igual a addEventListener
y no lo sé, explíqueme por favor.
Cualquier ayuda sería apreciada. No dude en sugerir una forma completamente diferente de resolver el problema.
addEventListener
es el método DOM adecuado para adjuntar controladores de eventos.
Internet Explorer (hasta la versión 8) utilizó un attachEvent
método alternativo.
Internet Explorer 9 admite el addEventListener
método adecuado.
Lo siguiente debería ser un intento de escribir una función para varios navegadores addEvent
.
function addEvent(evnt, elem, func) {
if (elem.addEventListener) // W3C DOM
elem.addEventListener(evnt,func,false);
else if (elem.attachEvent) { // IE DOM
elem.attachEvent("on"+evnt, func);
}
else { // No much to do
elem["on"+evnt] = func;
}
}
Estoy usando esta solución y funciona en IE8 o superior.
if (typeof Element.prototype.addEventListener === 'undefined') {
Element.prototype.addEventListener = function (e, callback) {
e = 'on' + e;
return this.attachEvent(e, callback);
};
}
Y luego:
<button class="click-me">Say Hello</button>
<script>
document.querySelectorAll('.click-me')[0].addEventListener('click', function () {
console.log('Hello');
});
</script>
Esto funcionará tanto en IE8 como en Chrome, Firefox, etc.
Como dijo Delan, desea utilizar una combinación de addEventListener para las versiones más nuevas y adjuntoEvent para las más antiguas.
Encontrarás más información sobre los oyentes de eventos en MDN . (Tenga en cuenta que hay algunas advertencias con el valor de 'esto' en su oyente).
También puedes utilizar un marco como jQuery para abstraer por completo el manejo de eventos.
$("#someelementid").bind("click", function (event) {
// etc... $(this) is whetver caused the event
});
Aquí hay algo para aquellos a quienes les gusta el código hermoso.
function addEventListener(obj,evt,func){
if ('addEventListener' in window){
obj.addEventListener(evt,func, false);
} else if ('attachEvent' in window){//IE
obj.attachEvent('on'+evt,func);
}
}
Robado descaradamente de Iframe-Resizer .