Ammeres: JS - Variablen in HTML mehrfach belegen, mit einer Funktion auswerten

Beitrag lesen

Wow. Das ist sehr gute Arbeit, Rolf; einen dicken Dank meinerseits!

Die Wirkweise habe ich schon verstanden: wenn ein value gewählt wird sagt es dem Handler, welches fieldset er sichtbar machen soll. Das gefällt mir von der Übersichtlichkeit her sehr gut. Außerdem lehne ich mich mal aus dem Fenster, es sollte möglich sein, mehrere Fieldsets mit einem Attribut zugleich ein- und auszublenden. (Auch wenn es aktuell keinen Bedarf gibt.)

Mir ist aufgefallen, dass der value gespeichert bleibt, auch wenn ein Feld aus- und wieder eingeblendet wird. Zuerst dachte ich mir, ich lösche bei "hide" automatisch alle Daten, aber irgendwie gefällt es mir - so ist bei einem Missklick nicht alles weg. Ich denke, ich werde stattdessen einen "clear"-Button in jene fieldsets einfügen, in denen er sinnvoll scheint.

Wenn Du möchtest, dass er im Internet Explorer funktioniert, musst Du das durch Alt-Konstrukte ersetzen.

Du weckst Kindheitserinnerungen. :P Ich hab mir schon vorgenommen (analog zu "Java Script muss aktiv sein") einen Hinweis einzubringen: "Der Code funktioniert mit allen modernen Browsern*. *Der Internet Explorer ist kein Browser, sondern eine Sicherheitslücke."

Für die rekursive Fortsetzung braucht man noch den showSelected-Schalter, um festlegen zu können, ob nur ausgeblendet werden soll oder auch die selektierten Folge-Fieldsets einzublenden sind.

Ich hoffe, das ist jetzt nicht weit über deiner Hutschnur...

Hutschnur habe ich schon lange nicht mehr gehört. :)

Bis auf den zitierten letzten Satz ist soweit alles verständlich. Den Switch - bzw. seinen Anknüpfpunkt - habe ich gefunden, er ist hier:

controlVisibility(controlGroup.querySelectorAll("option"), false); 

Das Verhalten passt perfekt so, wie es ist. Am Ende soll ja über genau diese Methode dem Nutzer nur die "richtige" Antwort angezeigt werden. Alle einzublenden würde bedeuten, dass er wieder nicht weiß, welche richtig sind. Das würde den ganzen anderen Code ad absurdum führen.

Ist meine Hutschnur hoch genug angesetzt? :)

.

Dazu habe ich noch 2 möglicherweise dumme, allgemeine Fragen:

  1. Warum werden eigentlich so viele Variablen deklariert?
    let controls = controlGroup.querySelectorAll("input[type=radio]");
    if (controls.length > 0)

ließe sich eigentlich in einer Zeile schreiben, da du die Variable nirgendwo anders verwendest:

    if (controlGroup.querySelectorAll("input[type=radio]").length > 0)

Da die Variable im Prinzip nichts anderes als ein Shortcut des Links ist, bleibt sich das Ergebnis doch gleich?

  1. Zu Aria: So wie ich es verstanden habe, sind die Aria-Attribute eine Art "verbesserte" Version der normalen Attribute - also Attribute, die wirklich interaktiv oder leichter zugänglich sind. Richtig soweit?

PS: Gibt es einen Grund, warum "let controls = ..." erst beim zweiten Teil (radio) eingeführt wird und nicht bereits bei dem Block (select)?