Hallo James,
Ich habe nun onclick = funktionsname; verwendet, und plötzlich funktioniert es.
merkwürdig - ich habe immer ein ungutes Gefühl, wenn ein Fehler "plötzlich" weg ist und ich nicht genau weiß, was es war.
Verstehe ich das richtig: Wenn ich setAttribute nehme dann darf ich nicht funktionsname() schreiben, sondern muss noch einen Parameter übergeben z.B. funktionsname(parameter) damit es mit setAttribute funktioniert?
Nein. Das hast du entweder falsch verstanden, oder hier falsch wiedergegeben. Ich hole mal etwas weiter aus.
Es gibt zwei grundsätzlich verschiedene Möglichkeiten, Eventhandler zu definieren:
a) als Attribut eines HTML-Elements:
<button onclick="alert('Ich bin geklickt worden!')">Klick!</button>
Bei dieser Urform wird der Eventhandler als String angegeben, denn die Werte von HTML-Attribute sind immer Strings. Darin wird Javascript-Code ganz normal geschrieben, so wie man ihn auch in einem separaten Script-Abschnitt schreiben würde.
Intern wird das automatisch in die Form b) umgesetzt.
b) Direkt aus einem Script heraus durch Zuweisung, so wie Jürgen und ich es heute mittag vorgeschlagen haben. Dabei ist zu beachten, was ich schon erwähnte: Man darf keine Klammern mit dem Funktionsnamen notieren, denn das würde die Funktion sofort aufrufen und ihr Ergebnis als Eventhandler zuweisen - man möchte stattdessen aber eine Referenz, einen Verweis auf die Funktion selbst.
Was Jürgen erst vorgeschlagen hat, also mit setAttribute(), entspricht eigentlich der Methode a), weil man quasi den Umweg geht, erst ein HTML-Attribut zu erstellen, und dann darauf zu vertrauen, dass das indirekt in ein entsprechendes Javascript-Objekt umgewandelt wird. Warum das in deinem Fall nicht geklappt hat, ist mir nicht wirklich klar - ich meine, es hätte funktionieren müssen, es war nur unnötig umständlich. Wobei ... ich erinnere mich dumpf, dass der IE mal Probleme damit hatte, habe aber im Moment keine Einzelheiten mehr parat.
Und bei input.onclick, da kann ich sowas wie Parameter überhaupt nicht angeben?
Doch, aber das habe ich bisher verschwiegen, weil deine Funktion so angelegt war, dass sie keine Parameter erwartet. Will man doch welche übergeben, muss man das in eine anonyme Funktion kapseln, beispielsweise so:
myinput.onclick = function(){ alert('Ich bin geklickt worden!'); };
Direkt im Eventhandler steht einem automatisch noch die reservierte Variable this zur Verfügung, die das Element repräsentiert, an das der Eventhandler gekoppelt ist. Man kann so bequem auf alle Eigeschaften des Elements zugreifen, etwa id, value, style und was da sonst noch so kreucht und fleucht.
So long,
Martin
--
Lehrer: Wieviel ist die Hälfte von 8?
Schüler: Kommt drauf an. Waagrecht 0 und senkrecht 3.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(