ventana salir pestaƱa pagina navegador eventos evento detectar close cierre cerrar capturar javascript events cross-browser addeventlistener attachevent

javascript - salir - Manejo de eventos entre navegadores



eventos javascript (1)

Necesito una función de navegador cruzado para registrar manejadores de eventos y una experiencia de controlador (la mayoría) consistente. No necesito todo el peso o la funcionalidad de una biblioteca como jQuery, así que escribí la mía. Creo que he logrado mis objetivos con el siguiente código, y hasta ahora mi prueba ha sido exitosa, pero lo he estado mirando por mucho tiempo. ¿Hay algún error en mi lógica o errores que me estoy perdiendo?

EDIT 1: Comentó cada bloque con la intención del navegador para mayor claridad. Se actualizó el bloque de IE para no llamar al func inmediato (gracias a los ojos agudos de Andy E ).

EDIT 2: Bloque IE actualizado para llamar a func.call() con this lugar de elem .

EDIT 3: Actualizado para pasar JSLint con "The Good Parts".

function hookEvent(elem, evt, func) { if (typeof elem === "string") { elem = document.getElementById(elem); } if (!elem) { return null; } var old, r; if (elem.addEventListener) //w3c { elem.addEventListener(evt, func, false); r = true; } else if (elem.attachEvent) //ie { elem[evt + func] = function () { func.call(this, window.event); }; r = elem.attachEvent("on" + evt, elem[evt + func]); } else //old { old = elem["on" + evt] ? elem["on" + evt] : function (e) { }; elem["on" + evt] = function (e) { if (!e) { e = window.event; } old.call(this, e); func.call(this, e); }; r = true; } return r; }


Hay un problema en esta línea:

r = elem.attachEvent("on" + evt, func.call(elem, window.event));

Esto ejecutará func () inmediatamente, en lugar de adjuntarlo como controlador para el evento. En cambio, el valor de retorno de func () se asignará al evento, lo que arrojará un error si su tipo no es "function" .

Puedo entender que no desea utilizar un marco, pero muchos ( muchos ) otros han escrito fragmentos de manejo de eventos entre navegadores. John Resig tiene una versión, Google para "javascript addEvent" para muchos más.

http://www.google.com/search?q=javascript+addevent