Domanda

Nel mio controllo utente ASP.NET sto aggiungendo del JavaScript al file window.onload evento:

if (!Page.ClientScript.IsStartupScriptRegistered(this.GetType(), onloadScriptName))
  Page.ClientScript.RegisterStartupScript(this.GetType(), onloadScriptName, 
    "window.onload = function() {myFunction();};", true);            

Il mio problema è che, se c'è già qualcosa nel file onload evento, allora questo lo sovrascrive.Come potrei consentire a due controlli utente di eseguire JavaScript nel file onload evento?

Modificare: Grazie per le informazioni sulle librerie di terze parti.Li terrò a mente.

È stato utile?

Soluzione

La maggior parte delle "soluzioni" suggerite sono specifiche di Microsoft o richiedono librerie eccessive.Ecco un buon modo.Funziona con i browser conformi al W3C e con Microsoft IE.

if (window.addEventListener) // W3C standard
{
  window.addEventListener('load', myFunction, false); // NB **not** 'onload'
} 
else if (window.attachEvent) // Microsoft
{
  window.attachEvent('onload', myFunction);
}

Altri suggerimenti

Esiste ancora una brutta soluzione (che è di gran lunga inferiore all'utilizzo di un framework o addEventListener/attachEvent) cioè risparmiare la corrente onload evento:

function addOnLoad(fn)
{ 
   var old = window.onload;
   window.onload = function()
   {
       old();
       fn();
   };
}

addOnLoad(function()
{
   // your code here
});
addOnLoad(function()
{
   // your code here
});
addOnLoad(function()
{
   // your code here
});

Tieni presente che framework come jQuery forniranno un modo per eseguire il codice quando il DOM è pronto e non quando viene caricata la pagina.

Il fatto che il DOM sia pronto significa che il tuo HTML è stato caricato ma non componenti esterni come immagini o fogli di stile, consentendoti di essere chiamato molto prima che venga attivato l'evento di caricamento.

Ho avuto un problema simile oggi, quindi l'ho risolto con un file index.js con quanto segue:

window.onloadFuncs = [];

window.onload = function()
{
 for(var i in this.onloadFuncs)
 {
  this.onloadFuncs[i]();
 }
}

e nei file js aggiuntivi a cui voglio allegare l'evento onload devo solo fare questo:

window.onloadFuncs.push(function(){
 // code here
});

Normalmente uso jQuery, ma questa volta mi sono limitato al puro js che mi ha costretto a usare la mente per un po'!

Mootools è un altro ottimo framework JavaScript che è abbastanza facile da usare e, come ha detto RedWolves jQuery puoi semplicemente continuare a eliminare tutti i gestori che desideri.

Per ogni file *.js che includo, racchiudo semplicemente il codice in una funzione.

window.addEvent('domready', function(){
    alert('Just put all your code here');
});

E ci sono anche vantaggi di utilizzare domready invece di onload

Prova questo:

window.attachEvent("onload", myOtherFunctionToCall);

function myOtherFunctionToCall() {
    // do something
}

modificare:ehi, mi stavo preparando per accedere con Firefox e riformattarlo da solo!Ancora non sembra formattare il codice per me con IE7.

Non so molto di ASP.NET, ma perché non scrivere una funzione personalizzata per l'evento onload che a sua volta chiami entrambe le funzioni per te?Se hai due funzioni, chiamale entrambe da un terzo script che registri per l'evento.

Hai considerato l'utilizzo di qualcosa del genere JQuery che fornisce un framework per la pulizia aggiungendo più gestori di eventi?

In realtà, secondo questa pagina MSDN, ti assomiglia Potere chiama questa funzione più volte per registrare più script.Hai solo bisogno di usare chiavi diverse (il secondo argomento).

Page.ClientScript.RegisterStartupScript(
    this.GetType(), key1, function1, true);

Page.ClientScript.RegisterStartupScript(
    this.GetType(), key2, function2, true);

Credo che dovrebbe funzionare.

So che è stata data risposta, ma voglio solo che tu sappia di questa funzione:

http://phrogz.net/JS/AttachEvent_js.txt

saluti T

Puoi farlo con jquery

$(window).load(function () {
    // jQuery functions to initialize after the page has loaded.
});
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top