Possono essere aggiunti più listener / handler di eventi allo stesso elemento usando javascript?

Io ho:

if (window.addEventListener) { window.addEventListener('load',videoPlayer,false); } else if (window.attachEvent) { window.attachEvent('onload',videoPlayer); } 

e poi più tardi ho:

 if (window.addEventListener) { window.addEventListener('load',somethingelse,false); } else if (window.attachEvent) { window.attachEvent('onload',somethingelse); } 

È preferibile / funzionale averli tutti insieme? Piace

 if (window.addEventListener) { window.addEventListener('load',videoPlayer,false); window.addEventListener('load',somethingelse,false); } else if (window.attachEvent) { window.attachEvent('onload',videoPlayer,false); window.attachEvent('onload',somethingelse); } 

Puoi fare come vuoi che faccia. Non devono stare insieme, dipende dal contesto del codice. Naturalmente, se riesci a metterli insieme, dovresti, poiché questo probabilmente rende più chiara la struttura del tuo codice (nel senso di “ora stiamo aggiungendo tutti i gestori di eventi”).

Ma a volte devi aggiungere dynamicmente i listener di eventi. Tuttavia, non è necessario testare più volte se si ha a che fare con IE o meno.

Sarebbe meglio astrarre da questo e testare solo una volta quale metodo è disponibile quando la pagina viene caricata. Qualcosa come questo:

 var addEventListener = (function() { if(document.addEventListener) { return function(element, event, handler) { element.addEventListener(event, handler, false); }; } else { return function(element, event, handler) { element.attachEvent('on' + event, handler); }; } }()); 

Questo testerà una volta quale metodo usare. Quindi puoi albind eventi nel tuo script con:

 addEventListener(window, 'load',videoPlayer); addEventListener(window, 'load',somethingelse); 

Io uso questa funzione:

 function addEvent (obj, type, fn) { if (obj.addEventListener) { obj.addEventListener(type, fn, false); } else if (obj.attachEvent) { obj.attachEvent('on' + type, function () { return fn.call(obj, window.event); }); } } 
 /** * multipleEventsListeners.js * Add the capability to attach multiple events to an element, just like jQuery does * https://gist.github.com/juanbrujo/a1f77db1e6f7cb17b42b */ multipleEventsListeners(events, func, elem) { elem = elem || document; var event = events.split(' '); for (var i = 0; i < event.length; i++) { elem.addEventListener(event[i], func, false); } } /* Use: var input = document.querySelector('input'); multipleEventsListeners(input, 'keyup change', function(e){ console.log = this.value; }); */ 

da: https://gist.github.com/juanbrujo/a1f77db1e6f7cb17b42b