Frage

In meinem ASP.NET-Benutzersteuerelement füge ich etwas JavaScript hinzu window.onload Ereignis:

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

Mein Problem ist, wenn da schon etwas drin ist onload Ereignis, dann wird es dadurch überschrieben.Wie würde ich vorgehen, damit zwei Benutzersteuerelemente jeweils JavaScript ausführen können? onload Ereignis?

Bearbeiten: Vielen Dank für die Informationen zu Bibliotheken von Drittanbietern.Ich werde sie im Gedächtnis behalten.

War es hilfreich?

Lösung

Die meisten der vorgeschlagenen „Lösungen“ sind Microsoft-spezifisch oder erfordern aufgeblähte Bibliotheken.Hier ist eine gute Möglichkeit.Dies funktioniert mit W3C-kompatiblen Browsern und mit Microsoft IE.

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

Andere Tipps

Es gibt immer noch eine hässliche Lösung (die der Verwendung eines Frameworks oder weitaus unterlegen ist). addEventListener/attachEvent), das heißt, den Strom zu speichern onload Ereignis:

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

Beachten Sie, dass Frameworks wie jQuery eine Möglichkeit bieten, Code auszuführen, wenn das DOM bereit ist und nicht, wenn die Seite geladen wird.

Wenn DOM bereit ist, bedeutet dies, dass Ihr HTML-Code geladen wurde, jedoch keine externen Komponenten wie Bilder oder Stylesheets, sodass Sie aufgerufen werden können, lange bevor das Ladeereignis ausgelöst wird.

Ich hatte heute ein ähnliches Problem, also habe ich es mit einem gelöst index.js mit den folgenden:

window.onloadFuncs = [];

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

und in zusätzlichen js-Dateien, denen ich das Onload-Ereignis anhängen möchte, muss ich nur Folgendes tun:

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

Normalerweise verwende ich jedoch jQuery, aber dieses Mal war ich auf reines JS beschränkt, was mich eine Zeit lang dazu zwang, meinen Verstand zu benutzen!

Mootools ist ein weiteres großartiges JavaScript-Framework, das ziemlich einfach zu verwenden ist und, wie RedWolves sagte, mit jQuery Sie können einfach so viele Handler einwerfen, wie Sie möchten.

Für jede *.js-Datei, die ich einbinde, schließe ich den Code einfach in eine Funktion ein.

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

Und es gibt sie auch Vorteile der Verwendung von domready anstelle von onload

Versuche dies:

window.attachEvent("onload", myOtherFunctionToCall);

function myOtherFunctionToCall() {
    // do something
}

bearbeiten:Hey, ich wollte mich gerade mit Firefox anmelden und das selbst neu formatieren!Mit IE7 scheint der Code für mich immer noch nicht formatierbar zu sein.

Ich weiß nicht viel über ASP.NET, aber warum nicht eine benutzerdefinierte Funktion für das Onload-Ereignis schreiben, die wiederum beide Funktionen für Sie aufruft?Wenn Sie über zwei Funktionen verfügen, rufen Sie beide über ein drittes Skript auf, das Sie für das Ereignis registrieren.

Haben Sie darüber nachgedacht, so etwas zu verwenden? JQuery Welches bietet einen Rahmen für die Bereinigung durch Hinzufügen mehrerer Event-Handler?

Eigentlich, laut diese MSDN-Seite, Es sieht aus wie du dürfen Rufen Sie diese Funktion mehrmals auf, um mehrere Skripte zu registrieren.Sie müssen lediglich unterschiedliche Schlüssel verwenden (das zweite Argument).

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

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

Ich glaube, das sollte funktionieren.

Ich weiß, dass dies beantwortet wurde, aber ich möchte Sie nur über diese Funktion informieren:

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

Grüße T

Sie können dies mit jquery tun

$(window).load(function () {
    // jQuery functions to initialize after the page has loaded.
});
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top