Struppi: Problem mit eventhandler/ Warum geht's nur nicht???

Beitrag lesen

Vielleicht hab ich da jetzt was noch nicht richtig verstanden, aber ich will doch eigentlich genau das, was du geschrieben hast: beim event onclick soll die Funktion Coords aufgerufen werden. Vielleicht liegt mein Unverständnis auch daran, dass es im HTML-Code (nicht in Javascript) genauso aussieht: Aufruf der Funktion Choords - mit Klammer und Semikolon und allem drum und dran... Wobei ich ehrlich gesagt noch gar nicht drüber nachgedacht habe, was eigentlich mit dem Rückgabewert passiert - sofern überhaupt einer vorhanden ist. So, je länger ich nun vor diesem Post sitze und überlege ob ich es überhaupt abschicke, desto mehr sehe ich, dass ich mich mit javascript noch eingehender beschäftigen muss. Allerdings finde ich nach wie vor, dass an Javascript so einiges gewöhnungsbedürftig (wenn nicht sogar unlogisch) ist.

Was denn?

Du musst nur verstehen was eine Funktionsreferenz ist und wie Eventhandler in JS funktionieren.

Schau dir das Beispiel mal an:

  
function eineFunktion()  
{  
    alert('Hallo!');  
}  
  
var eineFunktionsReferenz = eineFunktion;  
alert(eineFunktionsReferenz );  
eineFunktionsReferenz();  

Der Variable eineFunktionsReferenz wird hier die Referenz auf die Funkion eineFunktions() zugewiesen. Wenn du dir diese anzeigen läßt, macht JS daraus: eineFunktionsReferenz.toString() und du siehst den Quelltext. Wenn du die Klammer um die Referenz setzt, dann wird eben die Funktion aufgerufen.

Genau das Gleiche passiert jetzt bei den den Eventhandlern

[Objekt].onevent muss eine Referenz auf eine Funktion beinhalten. Tritt der Event ein (wie z.b. ein Klick auf das Element) wird nachgesehen, ob die diese Eigenschaft eine Funktionsreferenz beinhaltet und diese wird aufgerufen.

--> Object.click();

dann passiert in etwa folgendes:

if(typeof this.onclick == 'function') this.onclick(event)

D.h. intern wird in Mozillabrowsern der Event dann automatisch an als Funktionsparameter übergeben. Dieser muss bei inline (also innerhalb des HTML Tags deklarierten) Eventhandler von Hand übergeben werden.

HTH

Struppi.