Hi,
mache ich das dann z.B. so:
oldOnClick = myObj.onclick;
ja, wobei Du globale Variablen vermeiden solltest.
myObj.onclick = myFunc(oldOnClick);
Hiermit führst Du myFunc(oldOnClick) umgehend(!) aus und speicherst dessen Rückgabe in den onclick-Handler. Arbeite mit anonymen Funktionen, ggf. Closures (s. z.B. diesen oder andere Artikel zu dem Thema von molily), oder - wenn sichergestellt ist, dass es pro Objekt nur einmal zu so einem Verfahren kommt - speichere das vorherige onclick in eine von Dir erzeugte Eigenschaft im selben Objekt.
eval(oldOnClick);
In der Realität kannst Du Dir bei einem sicher sein: Entweder weißt Du extrem exakt, was Du tust, oder ein eval() ist garantiert fehl am Platz. In diesem Fall wird es nicht einmal funktionieren: oldOnClick ist ein Objekt vom Typ "function", d.h. es wird durch Anfügen einer öffnenden und einer schließenden runden Klammer ausgeführt, ggf. mit dazwischen angesiedelten Funktionsargumenten. Stell Dir einfach vor, Du hättest klassisch irgendwo "function oldOnClick() { ... }" hingeschrieben.
Im Prinzip ja - beides ist Unsinn. Wenn Du keine Ressource verlinken willst, existiert kein Grund, einen Link zu verwenden. Das onclick-Attribut ist für praktisch alle Elemente einsetzbar.
Ja stimmt, das mache ich nur weil <a> CSS-mäßig anders behandelt wird.
Schlechter Grund. CSS-mäßig kannst Du auch alle anderen Elemente wie einen Link behandeln; die einzige Schwierigkeit wird sein, ältere IEs nur per CSS mit Hover-Effekten o.ä. zu versorgen.
Gibt es eine onunload Methode oder Vergleichbares für einzelne <div>s? Also sowas wie $('meinDiv').onunload = meineFunc()?
Nein, leider nicht. Entsprechende Aktionen, die Dein <div> vernichten, musst Du selbst überwachen (lassen).
Das Problem ist nämlich, sofern ich es nach Vinzenz Methode mit onbeforeunload mache, dass ich das savedFlag wieder zurücksetzen muss sofern nicht gespeichert werden soll. Das kann ich aber definitiv erst in dem onunload Event abfangen. Das aber funktioniert wiederum nur für window.onunload = meineFunc(), also wenn ich wirklich eine komplett neue Seite lade, nicht aber wenn ich nur <div>s neu lade!
onbeforeunload wurde vermutlich in der Annahme genannt, dass die Seite verlassen würde. Wenn dies bei Dir nicht zutrifft, gibt es sicher andere Ereignisse, die in Frage kommen, z.B. die Ausführung einer bestimmten Funktion, welche dann einfach entsprechend erweitert werden muss.
Cheatah
X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
X-Will-Answer-Email: No
X-Please-Search-Archive-First: Absolutely Yes