Funktion erweitern
lukas
- javascript
Hi,
ich habe verschiedene Javascripts in einer Datei und nach jedem Script kommt folgende Anweisung:
window.onload = function()
{
(...)
};
Aber diese Anweisung wird nach jedem Script überschrieben, sodass nur noch der letzte Script ausgeführt wird ... Wie kann ich das nun lösen, dass die window.onload Funktion nicht ständig überschrieben wird, sondern erweiter wird?
Aber diese Anweisung wird nach jedem Script überschrieben, sodass nur noch der letzte Script ausgeführt wird ... Wie kann ich das nun lösen, dass die window.onload Funktion nicht ständig überschrieben wird, sondern erweiter wird?
schreibe alle entsprechenden funktionen untereinander, sieh sie dir genau an und denke scharf nach wie das gehen könnte, dass mann inherhalb einer funktion mehrere andere funktionen (anstatt einer) aufruft
schreibe alle entsprechenden funktionen untereinander, sieh sie dir genau an und denke scharf nach wie das gehen könnte, dass mann inherhalb einer funktion mehrere andere funktionen (anstatt einer) aufruft
hm, ja schon ich könnte natürlich einfach einmal ans Ende des Dokumentes die window.onload Funktion schreiben, aber das geht nicht, da sich die Javascript Dateien immer ändern bzw. nicht immer verfügbar sind (sie werden je nach Seite mit php included)
hm, ja schon ich könnte natürlich einfach einmal ans Ende des Dokumentes die window.onload Funktion schreiben, aber das geht nicht, da sich die Javascript Dateien immer ändern bzw. nicht immer verfügbar sind (sie werden je nach Seite mit php included)
was spricht dagagen das javascript mittels php zu generieren?
Mahlzeit lukas,
Aber diese Anweisung wird nach jedem Script überschrieben, sodass nur noch der letzte Script ausgeführt wird ... Wie kann ich das nun lösen, dass die window.onload Funktion nicht ständig überschrieben wird, sondern erweiter wird?
Überprüfe, was für ein Typ das Attribut "onload" hat - wenn es sich um eine Funktion handelt, musst Du sie halt vor Deinem zusätzlichen Code ausführen lassen:
if (typeof window.onload === 'function') {
var _onload = window.onload;
window.onload = function () {
_onload();
...
};
} else {
window.onload = function () {
...
};
}
MfG,
EKKi
if (typeof window.onload === 'function') {
var _onload = window.onload;
window.onload = function () {
_onload();
...
};
} else {
window.onload = function () {
...
};
}
Danke, so funktioniert es!
Danke, so funktioniert es!
Hmm, schade zu früh gefreut. wenn ich das Script mehrmals untereinander schreibe meldet Firefox "too much recursion" und IE6 "Stack overflow at line: x".
Troztdem danke.
Mahlzeit lukas,
Hmm, schade zu früh gefreut. wenn ich das Script mehrmals untereinander schreibe meldet Firefox "too much recursion" und IE6 "Stack overflow at line: x".
Kapsele Deine vielen Anweisungen in entsprechende Funktionen. Schreibe in den Event-Handler an die Stelle der "..." nur den Aufruf dieser Funktion(en).
MfG,
EKKi
Mahlzeit lukas,
Hmm, schade zu früh gefreut. wenn ich das Script mehrmals untereinander schreibe meldet Firefox "too much recursion" und IE6 "Stack overflow at line: x".
Kapsele Deine vielen Anweisungen in entsprechende Funktionen. Schreibe in den Event-Handler an die Stelle der "..." nur den Aufruf dieser Funktion(en).
MfG,
EKKi
Danke, aber ich habe es jetzt einfacher gelöst. Ich schreibe die Funktionen einfach in einen Array und diese werden dann alle am Ende des Dokumentes ausgeführt:
window.onload = function() {
for (x=0; window._onload[x]; x++) {
window._onload[x]();
}
};
Danke, aber ich habe es jetzt einfacher gelöst. Ich schreibe die Funktionen einfach in einen Array und diese werden dann alle am Ende des Dokumentes ausgeführt:
window.onload = function() {
for (x=0; window._onload[x]; x++) {
window._onloadx;
}
};
Das ist nicht einfacher, als das:
~~~javascript
function addLoadEvent(func) {
var oldonload = window.onload;
window.onload = function() {
if (oldonload) oldonload();
func();
}
}
Struppi.
Danke, aber ich habe es jetzt einfacher gelöst. Ich schreibe die Funktionen einfach in einen Array und diese werden dann alle am Ende des Dokumentes ausgeführt:
window.onload = function() {
for (x=0; window._onload[x]; x++) {
window._onloadx;
}
};
Schlechte Lösung. Du verwendest eine globale Variable, nämlich `_onload`{:.language-javascript}, das solltest du lieber vermeiden.
--
Reden ist Silber, Schweigen ist Gold, meine Ausführungen sind Platin.
Self-Code: sh:( ch:? rl:( br:> n4:( ie:{ mo:) va:) de:> zu:} fl:| ss:| ls:~ js:|
Wie kann ich das nun lösen, dass die window.onload Funktion nicht ständig überschrieben wird, sondern erweiter wird?
Mit zeitgemäßem Event-Handling.
addLoadEvent
addEvent alt
addEvent neu
Nachteile des traditionellen Event-Handlings und Alternativen
Mathias
@@lukas:
Wie kann ich das nun lösen, dass die window.onload Funktion nicht ständig überschrieben wird, sondern erweiter wird?
Entweder wie EKKi beschrieb oder du verzichtest auf 'window.onload
' und verwendest 'window.addEventListener()
' bzw. 'window.attachEvent()
' für IE.
Live long and prosper,
Gunnar