agregarEventListener en Internet Explorer

Resuelto The Mask asked hace 13 años • 8 respuestas

¿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 addEventListenery no lo sé, explíqueme por favor.

Cualquier ayuda sería apreciada. No dude en sugerir una forma completamente diferente de resolver el problema.

The Mask avatar Aug 03 '11 20:08 The Mask
Aceptado

addEventListeneres el método DOM adecuado para adjuntar controladores de eventos.

Internet Explorer (hasta la versión 8) utilizó un attachEventmétodo alternativo.

Internet Explorer 9 admite el addEventListenermé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;
   }
}
user278064 avatar Aug 03 '2011 14:08 user278064

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.

RTeobaldo avatar Sep 04 '2014 20:09 RTeobaldo

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
});
phtrivier avatar Aug 03 '2011 14:08 phtrivier

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 .

Eddie avatar Jan 11 '2016 19:01 Eddie