2012-03-05 19 views
15

Come superare i gestori di eventi che vengono ignorati? Ho uno script dicono a.jsimpedire che window.onload venga sottoposto a override javascript

window.onload = function() { 
    //Handler in a.js 
} 

Un altro script dire b.js

window.onload = function() { 
    //Handler in b.js 
} 

dove,

a.js è una sorta di libreria di 3a parte costruita da me

b.js è un editore che utilizza il mio script [Non posso apportare alcuna modifica qui fuori]

Il gestore onload in b.js sostituirà il gestore di a.js?

Se sì, come impedire che ciò accada?

Costruirà una coda di tutti i gestori di eventi in a.js e li deque sull'aiuto all'evento?

Ma a.js conoscerà tutti i gestori di eventi per un evento in anticipo fino a quando non viene caricato b.js?

pensieri e riferimenti aiuterebbe

risposta

8

Usa element.addEventListener o window.attachEvent nelle versioni di livello inferiore di IE.

campione addEvent metodo:

function addEvent(node, type, listener) { 
    if (node.addEventListener) { 
     node.addEventListener(type, listener, false); 
     return true; 
    } else if (node.attachEvent) { 
     node['e' + type + listener] = listener; 
     node[type + listener] = function() { 
      node['e' + type + listener](window.event); 
     } 
     node.attachEvent('on' + type, node[type + listener]); 
     return true; 
    } 
    return false; 
}; 

Nota - La maggior parte, se non tutte, le moderne librerie JavaScript come jQuery e MooTools hanno le loro implementazioni. Raccomando di sfruttare le rispettive API, poiché estrapolano diverse implementazioni del browser e sono state testate a fondo.

+0

perché abbiamo bisogno di nodo ['e' + tipo + listener]? Will node.attachEvent ('on' + type, listener) funziona? – Tamil

16

si dovrebbe usare addEventListener() avere vari gestori per lo stesso evento

window.addEventListener("load", yourfunction, false); 
-1

Sì, la seconda istruzione ha la priorità il primo. Poiché stai utilizzando il modello di registrazione tradizionale, è consentito un solo handle di evento per qualsiasi evento e oggetto. L'assegnazione della funzione non è cumulativa. Ma è possibile:

window.onload = function() {handlerinb(); handlerina()} 
Problemi correlati