Adăugați mai multe evenimente window.onload

În controlul ASP.NET de utilizator am adăugat niște JavaScript în evenimentul window.onload :

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

Problema mea este că, dacă există deja ceva în evenimentul onload , acesta suprascrie. Cum aș putea să permit doi controale de utilizator pentru fiecare să execute JavaScript în evenimentul onload ?

Edit: Thanks for the info on third party libraries. I'll keep them in mind.

0
fr hi bn
wee dont nevoie de biblioteci stinkin! fyi, pentru firefox, window.attachEvent ('load', myFunction); nu window.attachEvent ("ONload", myFunction);
adăugat autor Frank Schwieterman, sursa

9 răspunsuri

Ați considerat că utilizați ceva de genul jQuery care oferă un cadru pentru curățarea adăugării mai multor agenți de procesare a evenimentelor?

0
adăugat
Ați putea să vă extindeți?
adăugat autor adhanlon, sursa

Există încă o soluție urâtă (care este cu mult inferioară utilizării unui cadru sau addEventListener / atașatEventEvent ) care va salva evenimentul onload

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

Rețineți că cadrele ca jQuery vor oferi o modalitate de a executa cod atunci când DOM este gata și nu când pagina se încarcă.

DOMul este gata înseamnă că HTML-ul dvs. a încărcat, dar nu și componentele externe precum imaginile sau foile de stil, permițându-vă să fiți apelat cu mult înainte de apariția evenimentului de încărcare.

0
adăugat

Incearca asta:

window.attachEvent("onload", myOtherFunctionToCall);

function myOtherFunctionToCall() {
   //do something
}

editați: hei, tocmai mă pregăteam să vă loghez cu Firefox și să-l reformat singură! Încă nu pare să formateze cod pentru mine cu IE7.

0
adăugat

Nu știu multe despre ASP.NET, dar de ce nu scriu o funcție personalizată pentru evenimentul onload care la rândul său cheamă ambele funcții pentru tine? Dacă aveți două funcții, apelați-le pe ambele dintr-un al treilea scenariu pe care îl înregistrați pentru eveniment.

0
adăugat

De fapt, în conformitate cu această pagină MSDN , se pare că tu > poate suna această funcție de mai multe ori pentru a înregistra mai multe scripturi. Trebuie doar să utilizați chei diferite (al doilea argument).

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

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

Cred că ar trebui să funcționeze.

0
adăugat
Nu se execută aceste scripturi când pagina ajunge la ele? Nu în timpul încărcării?
adăugat autor Ray, sursa

Puteți face asta cu jquery

$(window).load(function() {
   //jQuery functions to initialize after the page has loaded.
});
0
adăugat

Mootools is another great JavaScript framework which is fairly easy to use, and like RedWolves said with jQuery you can can just keep chucking as many handlers as you want.

Pentru fiecare fișier * .js pe care îl includ, am înfășurat codul într-o funcție.

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

And there are also advantages of using domready instead of onload

0
adăugat

Cele mai multe dintre "soluțiile" sugerate sunt specifice Microsoft sau necesită biblioteci umflate. Iată o cale bună. Aceasta funcționează cu browserele compatibile cu W3C și cu Microsoft IE.

if (window.addEventListener)//W3C standard
{
  window.addEventListener('load', myFunction, false);//NB **not** 'onload'
} 
else if (window.attachEvent)//Microsoft
{
  window.attachEvent('onload', myFunction);
}
0
adăugat
scuză-mă domnule, ce înseamnă NB nu "încărcare"?
adăugat autor meJustAndrew, sursa
Notă: funcția atribuită (myFunction) în window.attachEvent ('onload', myFunction); este întotdeauna tras după orice funcție atribuită window.onload
adăugat autor user961954, sursa
@meJustAndrew el inseamna ca atunci cand folosesti addEventListener nu folosesti 'onload' folosesti doar 'load'.
adăugat autor fmacdee, sursa

Am avut o problemă similară astăzi, deci am rezolvat-o cu index.js cu următorul text:

window.onloadFuncs = [];

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

și în fișiere JS suplimentare care vreau să atașați evenimentul onload trebuie doar să fac acest lucru:

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

În mod normal, folosesc jQuery, dar de această dată am fost limitat la un JJ pur care a fost forțat să-mi folosească mintea pentru o vreme!

0
adăugat
JavaScript, România - Moldova
JavaScript, România - Moldova
328 participanți

Comunitatea Română JavaScript: github.com/js-ro Pentru confort, opriți notificările. Parteneri: @node_ro, @php_ro, @python_ro, @seo_ro, @RomaniaGroup, @ai_ro, @Grupuri_IT Offtop: @holywars_ro Joburi: @js_jobs_ro Sponsored with ❤️ by ciupacabra.com