molily: Verwendung im Source Code

Beitrag lesen

Hallo,

Mach es, wie Sven sagt. Ich werde trotzdem mal beispielhaft erklären, wie du solche Probleme ohnehin vermeiden kannst.

Zuerst einmal brauchst du keinen globalen Array zum Speichern, sondern kannst die Referenzen in dem Kontext speichern, wo sie gebraucht werden. Du kannst Referenzen einfach an anderen Elementobjekten speichern. Du willst ein Element (in deinem Code: button) mit einem Input-Feld (in deinem Code: curr) verknüpfen. Also verknüpfst du sie, indem du eine Referenz des einen als Eigenschaft beim anderen speicherst:

button.zugehörigesEingabefeld = curr;

In button.onclick hast du nun mit this Zugriff auf das »Button«-Element. Also kommst du - logischerweise - über this.zugehörigesEingabefeld an das zugehörige Eingabefeld. So einfach ist das. Ein globaler Array, der die Zuordnungen speichert, wird nicht benötigt.

Man kann auch noch hochgestochener JavaScript schreiben, dann braucht man diese Referenz nicht unbedingt, weil man durch verschachtelte Funktionen dafür sorgen kann, dass in der click-Handlerfunktion einfach die curr-Variabgle verfügbar ist. Das ist in deinem Code auch schon der Fall, aber die curr-Variable wechselt in der Funktion makeClickable den Wert, sodass eine eindeutige Zuordnung nicht möglich wäre. Mit einer Helferfunktion ginge es aber:

function setHandler (button, input) {
   button.onclick = function (e) {
      alert(input); // ist hier direkt verfügbar
   };
}

In der Schleife:

setHandler(button, curr);

Man notiert eine Funktion, die zwei Parameter erwartet und führt sie in der Schleife aus mit den beiden Elementobjekten als Parameter. Diese Funktion fügt den Handler hinzu. Durch die Verschachtelung ist in der onclick-Funktion die lokale Variable input aus dem Scope der setHandler-Funktion verfügbar. Diesen Effekt nennt man Closure.

Mathias