press keys javascript internet-explorer internet-explorer-9 addeventlistener

javascript - keys - addEventListener en Internet Explorer



press key javascript (8)

Aquí hay algo para aquellos a los que les gusta el código bonito.

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); } }

Desvergonzadamente robado de Iframe-Resizer .

¿Cuál es el equivalente al Element Object 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 sé, explica por favor.

Cualquier ayuda sería apreciada. Siéntase libre de sugerir una forma completamente diferente de resolver el problema.


Como dijo Delan, desea utilizar una combinación de addEventListener para las versiones más nuevas y attachEvent 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 puede usar un marco como jQuery para abstraer el manejo del evento por completo.

$("#someelementid").bind("click", function (event) { // etc... $(this) is whetver caused the event });


EDITAR

Escribí un fragmento que emula la interfaz EventListener y el ie8, se puede llamar incluso en objetos simples: https://github.com/antcolag/iEventListener/blob/master/iEventListener.js

ANTIGUA RESPUESTA

esta es una forma de emular addEventListener o attachEvent en navegadores que no admiten uno de esos
la esperanza ayudará

(function (w,d) { // var nc = "", nu = "", nr = "", t, a = "addEventListener", n = a in w, c = (nc = "Event")+(n?(nc+= "", "Listener") : (nc+="Listener","") ), u = n?(nu = "attach", "add"):(nu = "add","attach"), r = n?(nr = "detach","remove"):(nr = "remove","detach") /* * the evtf function, when invoked, return "attach" or "detach" "Event" functions if we are on a new browser, otherwise add "add" or "remove" "EventListener" */ function evtf(whoe){return function(evnt,func,capt){return this[whoe]((n?((t = evnt.split("on"))[1] || t[0]) : ("on"+evnt)),func, (!n && capt? (whoe.indexOf("detach") < 0 ? this.setCapture() : this.removeCapture() ) : capt ))}} w[nu + nc] = Element.prototype[nu + nc] = document[nu + nc] = evtf(u+c) // (add | attach)Event[Listener] w[nr + nc] = Element.prototype[nr + nc] = document[nr + nc] = evtf(r+c) // (remove | detach)Event[Listener] })(window, document)


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 entonces:

<button class="click-me">Say Hello</button> <script> document.querySelectorAll(''.click-me'')[0].addEventListener(''click'', function () { console.log(''Hello''); }); </script>

Esto funcionará tanto con IE8 como con Chrome, Firefox, etc.


John Resig, autor de jQuery, presentó su versión de la implementación en addEvent navegadores de addEvent y removeEvent para eludir los problemas de compatibilidad con addEventListener incorrecto o inexistente de IE.

function addEvent( obj, type, fn ) { if ( obj.attachEvent ) { obj[''e''+type+fn] = fn; obj[type+fn] = function(){obj[''e''+type+fn]( window.event );} obj.attachEvent( ''on''+type, obj[type+fn] ); } else obj.addEventListener( type, fn, false ); } function removeEvent( obj, type, fn ) { if ( obj.detachEvent ) { obj.detachEvent( ''on''+type, obj[type+fn] ); obj[type+fn] = null; } else obj.removeEventListener( type, fn, false ); }

Fuente: http://ejohn.org/projects/flexible-javascript-events/



addEventListener es compatible desde la versión 9 en adelante; para versiones anteriores, use la función attachEvent algo similar.


addEventListener es el método DOM apropiado para utilizar para adjuntar controladores de eventos.

Internet Explorer (hasta la versión 8) usó un método alternativo attachEvent .

Internet Explorer 9 es compatible con el método addEventListener adecuado.

Lo siguiente debe ser un intento de escribir una función addEvent cross-browser.

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[evnt] = func; } }