Dodaj wiele okien.wydarzenia onload

In my ASP.NET Kontrola użytkownika dodaję trochę JavaScript do zdarzenia window.onload:

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

Mój problem polega na tym, że jeśli coś jest już w zdarzeniu onload, to to nadpisuje to. Jak mogę zezwolić dwóm kontrolkom użytkownika na uruchamianie JavaScript w zdarzeniu onload?

Edit: Thanks for the info on third party libraries. Będę o nich pamiętał.

Author: Rich Churcher, 2008-08-13

8 answers

Większość" rozwiązań " sugerowanych są specyficzne dla Microsoft, lub wymagają nadętych bibliotek. Jest jeden dobry sposób. Działa to z przeglądarkami zgodnymi z W3C oraz z Microsoft IE.

if (window.addEventListener) // W3C standard
{
  window.addEventListener('load', myFunction, false); // NB **not** 'onload'
} 
else if (window.attachEvent) // Microsoft
{
  window.attachEvent('onload', myFunction);
}
 102
Author: user83421,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-27 01:34:31

Nadal jest brzydkie rozwiązanie (które jest znacznie gorsze od używania frameworka lub addEventListener/attachEvent) aby zapisać bieżące Zdarzenie 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
});

Zauważ, że frameworki takie jak jQuery zapewnią sposób wykonywania kodu, gdy DOM jest gotowy, a nie gdy Strona się ładuje.

Gotowy DOM oznacza, że Twój HTML ma załadowane, ale nie zewnętrzne komponenty, takie jak obrazy lub arkusze stylów, co pozwala na wywołanie Cię na długo przed wywołaniem zdarzenia load.

 18
Author: Vincent Robert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-11 03:26:45

Miałem podobny problem dzisiaj więc rozwiązałem go mając index.js z następującym:

window.onloadFuncs = [];

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

A w dodatkowych plikach js, które chcę załączyć Zdarzenie onload, po prostu muszę to zrobić:

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

Zwykle używam jQuery, ale tym razem ograniczyłem się do czystego js, który zmuszony był przez jakiś czas używać mojego umysłu!

 6
Author: Fábio de Lima Souto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-11 03:27:34

Mootools to kolejny świetny framework JavaScript, który jest dość łatwy w użyciu i jak powiedział RedWolves z jQuery możesz po prostu trzymać tyle programów obsługi, ile chcesz.

Dla każdego *.dołączam plik js, po prostu zawijam kod w funkcję.

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

I są również zalety korzystania z domready zamiast onload

 3
Author: cole,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-13 04:16:01

Spróbuj tego:

window.attachEvent("onload", myOtherFunctionToCall);

function myOtherFunctionToCall() {
    // do something
}

Edit: Hej, właśnie przygotowywałem się do zalogowania się z Firefoksem i sformatowania tego osobiście! Nadal nie wydaje mi się formatować kodu za pomocą IE7.

 2
Author: Chris Farmer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-13 03:33:50

I don ' t know a lot about ASP.NET, ale dlaczego nie napisać niestandardowej funkcji dla zdarzenia onload, które z kolei wywołuje obie funkcje dla Ciebie? Jeśli masz dwie funkcje, wywołaj je z trzeciego skryptu, który rejestrujesz w wydarzeniu.

 1
Author: Derek Park,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-13 03:26:40

Właściwie, według tej strony MSDN, wygląda na to, że możesz wywołać tę funkcję wiele razy, aby zarejestrować wiele skryptów. Wystarczy użyć różnych kluczy(drugi argument).

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

Page.ClientScript.RegisterStartupScript(
    this.GetType(), key2, function2, true);
Uważam, że to powinno zadziałać.
 1
Author: Derek Park,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-13 03:39:06

Możesz to zrobić z jquery

$(window).load(function () {
    // jQuery functions to initialize after the page has loaded.
});
 1
Author: DadViegas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-11 03:24:47