Don P: Eigene DOM-Events feuern und verarbeiten

Beitrag lesen

Hallo,

Kannst du mal ein praxisnahes Anwendungsbeispiel konstruieren, auf was für einem Element du worauf reagieren willst, und wer dabei wen nicht kennen soll und warum?

Ok, ich versuch's mal:

Es gibt ein Eingabefeld für Text und eine Select-Box, beide sind anfangs leer. Dann gibt es noch jede Menge Klickbuttons und sonstige Divs etc., die dazu dienen, gewisse Einstellungen zu machen.

Solange nichts in das Eingabefeld eingeben wird, macht es keinen Sinn, die Selectbox zu benutzen, weil deren Optionen nur mit dem Text des Eingabefelds gefüllt werden können, was dann die Erzeugung von weiteren Objekten zur Folge hat, die man mit den anderen Klickbuttons etc. konfigurieren kann.

Alle Elemente außer dem Eingabefeld müssen also anfangs deaktiviert sein. Das Eingabefeld hat einen onchange-Handler, der dafür sorgt, dass jede neue Eingabe als Option im Select-Feld landet. Dieses hat ebenfalls Methoden die weiters notwendigen Objekte zu erzeugen. Aber weder die Handler des Eingabefelds noch die des Selectfelds "wissen" von der Existenz der andern Klickbuttons etc., die aber ebenfalls aktiviert werden müssen, sobald die mit ihnen zu konfigurierenden Objekte erzeugt sind.

Auch diese Objekte "wissen" nicht, durch welche Buttons sie konfiguriert werden. Die Buttons und sonstigen Bedienelemente wissen aber von den Objekten, und setzen einfach deren Eigenschaften entsprechend, wenn sie z.B. geklickt werden.

Wenn man ein Objekt über einen Button wieder entfernt, gibt es einen Eintrag weiger im Select-Feld, und wenn dieses ganz leer wird, müssen wieder sämtliche anderen Bedienelemente für die Objekte deaktiviert werden, weil sie ja nicht mehr existieren. Aber wie soll ein Handler des Selectfelds das bewerkstelligen, wenn es entsprechenden Buttons etc. nicht "kennt"?

Lösung: Es könnte einfach blind einen Event in die Welt feuern, auf den alle Buttons hören, die dafür konfiguriert sind.

Auch bestimmte andere Programmzustände verlangen das vorübergehende Deaktivieren bzw. Ein/Ausblenden von Bedienelementen, ohne dass die einzelne Routine (in der der Zustand auftritt) wissen muss, welche das genau sind.

Ist es jetzt deutlicher?

Gruß, Don P