otto Normalverbraucher: Verschachteltes Form-Tag

Hallo,

ich habe eine neue Seite derart aufgebaut dass die Index Seite als Globale Vorlage mit Containern agiert in die mit PHP unterschiedliche Inhalte eingesetzt werden. Es existiert in der Index Seite eine globales Form Tag mit Auswertungen mittels Javascript.

Leider taucht jetzt ein Seiteninhalt mit einem <input typ ='text' ... auf mit dem Statement 'required'. Das hat zur Folge, dass alle anderen Links und Funktionen nicht mehr funktionieren, wenn dieses Feld keinen Inhalt hat.

Deshalb kam die Idee: Kann man das Form Tag nicht irgendwie verschachteln?

Gruß Otto

  1. Hallo Otto,

    da du Javascript sowieso nutzt, kannst du das Feld auf required=false setzen.

    Falls das Feld nicht bekannt ist, musst du alle inputs durchlaufen.

    Idee (nicht getestet):

    arr_input = document.getElementsByTagName( "input" );
    for ( let i=0; i<arr_input.length; i++ ) {
      arr_input[i].required = false;
    }
    

    Gruß Linuchs

    1. Klingt gut. Müsste natürlich dann bei allen anderen Funktionen eingesetzt werden. Wäre insofern nicht allzu tragisch, da ja eh alle global gesetzt sind.

      Mal testen.

      1. Müsste natürlich dann bei allen anderen Funktionen eingesetzt werden.

        Wenn du eine *.js Datei einbindest, kannst du diesen Lauf zentral machen, unmittelbar nach Laden der Seite. Ungefähr so:

        window.addEventListener('DOMContentLoaded', function () {
          arr_input = document.getElementsByTagName( "input" );
          for ( let i=0; i<arr_input.length; i++ ) {
            arr_input[i].required = false;
          }
        });
        
      2. @@Otto Normalverbraucher

        Klingt gut.

        Wann immer JavaScript die Lösung für etwas sein soll, was man auch ohne JavaScript hinbekommt, dann klingt das nicht gut.

        😷 LLAP

        --
        „Dann ist ja auch schrecklich, dass wir in einem Land leben, in dem nicht nur Bildungswillige leben, sondern auch hinreichende Zahlen von Bekloppten. Das darf ich so locker formulieren, ich bin ja jetzt Rentner und muss nicht mehr auf jedes Wort achten.“
        — Joachim Gauck über Impfgegner
        1. @@Otto Normalverbraucher

          Klingt gut.

          Wann immer JavaScript die Lösung für etwas sein soll, was man auch ohne JavaScript hinbekommt, dann klingt das nicht gut.

          😷 LLAP

          Wenn Du mir nen Tip hast, wie ich umfangreiche Berechnungen ohne JS hinbekomme, nehme ich deinen Tip gerne an.

          1. @@Otto Normalverbraucher

            Wann immer JavaScript die Lösung für etwas sein soll, was man auch ohne JavaScript hinbekommt, dann klingt das nicht gut.

            Wenn Du mir nen Tip hast, wie ich umfangreiche Berechnungen ohne JS hinbekomme, nehme ich deinen Tip gerne an.

            Es ging nicht um deine umfangreichen Berechnungen, sondern um das Ausschalten der Nutzereingabe-Validierung.

            😷 LLAP

            --
            „Dann ist ja auch schrecklich, dass wir in einem Land leben, in dem nicht nur Bildungswillige leben, sondern auch hinreichende Zahlen von Bekloppten. Das darf ich so locker formulieren, ich bin ja jetzt Rentner und muss nicht mehr auf jedes Wort achten.“
            — Joachim Gauck über Impfgegner
  2. @@otto Normalverbraucher

    Es existiert in der Index Seite eine globales Form Tag mit Auswertungen mittels Javascript.

    Was heißt das?

    Leider taucht jetzt ein Seiteninhalt mit einem <input typ ='text' ... auf mit dem Statement 'required'.

    Wo taucht das auf? Innerhalb des form-Elements? (Element, nicht Tag.)

    Gehört das denn in dieses Formular? Oder in ein eigenes?

    Das hat zur Folge, dass alle anderen Links und Funktionen nicht mehr funktionieren, wenn dieses Feld keinen Inhalt hat.

    Dann schalte doch die Validierung ab – für das gesamte Formular oder für das Eingabefeld.

    Deshalb kam die Idee: Kann man das Form Tag nicht irgendwie verschachteln?

    Nein.

    😷 LLAP

    --
    „Dann ist ja auch schrecklich, dass wir in einem Land leben, in dem nicht nur Bildungswillige leben, sondern auch hinreichende Zahlen von Bekloppten. Das darf ich so locker formulieren, ich bin ja jetzt Rentner und muss nicht mehr auf jedes Wort achten.“
    — Joachim Gauck über Impfgegner
    1. Hallo,

      Deshalb kam die Idee: Kann man das Form Tag nicht irgendwie verschachteln?

      Nein.

      und das form-Element auch nicht. 😉

      Live long and pros healthy,
       Martin

      --
      Klein φ macht auch Mist.
  3. Hallo otto,

    Leider taucht jetzt ein Seiteninhalt mit einem <input typ ='text' ... auf mit dem Statement 'required'. Das hat zur Folge, dass alle anderen Links und Funktionen nicht mehr funktionieren, wenn dieses Feld keinen Inhalt hat.

    Links funktionieren sicherlich noch, die lösen keinen Submit des Forms aus. Es sei denn, du verwendest Oberflächenelemente, die wie Links aussehen, aber indirekt doch das Form submitten.

    Das Grundproblem klingt aber nach Fußballspielen, ohne sich die Schuhe schmutzig machen zu wollen.

    Entweder hat diese Inhaltskomponente den Bedarf, dieses Eingabeelement als Pflichtfeld zu haben, dann muss dieser Bedarf auch erfüllt werden. Oder sie hat ihn nicht, dann gehört da auch kein required hin.

    Wenn dein Seiteninhalt aus Gruppen besteht, und jede Gruppe für sich ausgewertet wird, dann wäre es ggf. sinnvoll, jede Gruppe in ein eigenes Form zu setzen und dieses Form als "Geltungsbereich" der Validierung anzusehen. Forms zu schachteln geht jedenfalls nicht.

    Wenn es unbedingt ein großes Form sein muss, solltest Du versuchen, das required Attribut loszuwerden und durch eine eigene, gruppierfähige Validierung zu ersetzen. Das ist nicht schön, und man soll normalerweise keine Browserfunktionalität nachbauen, aber wenn der Browser nun mal keine scoped validation hat... Du könntest die Validierattribute bspw. durch data-Attribute ersetzen, sowas wie data-required="true" oder data-pattern="...". Wenn dein Script entscheidet, dass eine Eingabegruppe relevant ist, könntest Du diese Ersatzattribute in die echten HTML Attribute kopieren, und ist sie es nicht, nimmst Du die Attribute wieder weg. Sind ja nur 6 (required, pattern, minlength, maxlength, min, max).

    Ohne genauere Kenntnis deiner Fachlichkeit ist das allerdings alles Spekulatius.

    Rolf

    --
    sumpsi - posui - obstruxi
  4. Lieber otto Normalverbraucher,

    Es existiert in der Index Seite eine globales Form Tag mit Auswertungen mittels Javascript.

    da ist ja der Fehler!

    Wozu braucht es ein Formular, wenn die Auswertung ausschließlich mit JavaScript gemacht wird? Wenn das Formular nie an den Server versandt wird, braucht es auch kein form-Element.

    Leider taucht jetzt ein Seiteninhalt mit einem <input typ ='text' ... auf mit dem Statement 'required'.

    Wenn Dich das überrascht, dann hast Du den Überblick verloren, welche Funktionalitäten Deines Codes welche Wirkungen hervorrufen.

    Gegenfrage: Warum wird das bereits vorhandene form-Element mit ergänzenden Inhalten erweitert, anstatt dass Du für verschiedene Zwecke verschiedene form-Elemente verwendest?

    Das hat zur Folge, dass alle anderen Links und Funktionen nicht mehr funktionieren, wenn dieses Feld keinen Inhalt hat.

    Links in einem Formular, die nicht mehr funktionieren... das muss man erst einmal nachvollziehen können. Ich kann es nicht.

    Liebe Grüße

    Felix Riesterer

    1. printf('Hallo %s!', ['Du', 'ihr', 'Welt', 'zusammen'][rand(0, 3)]);

      Es existiert in der Index Seite eine globales Form Tag mit Auswertungen mittels Javascript.

      da ist ja der Fehler!

      Wozu braucht es ein Formular, wenn die Auswertung ausschließlich mit JavaScript gemacht wird? Wenn das Formular nie an den Server versandt wird, braucht es auch kein form-Element.

      Ein form-Element ist sehr angebracht, weil es

      1. weiterhin ein Formular ist und daher als solches ausgezeichnet werden sollte

      und man

      1. die Element-Referenzen auf dem Silbertablett präsentiert bekommt (via document.forms[…]…) und nicht mit document.getElement(s)ByWHATEVER oder querySelector[All]) o.ä. schon bereitgestellte Referenzen erneut ermitteln lassen muss.

      /K

      --
      Klingonen sind doof. Sie rufen ständig nach einem Kaplan und wollen nach dem Tod in Styropor® sein.