Roberto Cozzetto: Mehrere Formularfelder gleichzeitig vergleichen

Hallo zusammen

Ich habe ein Formular mit fünf DropDown-Auswahllisten (P1,P2,P3,P4,P5); in diesen fünf Auswahllisten befinden sich immer die gleichen Optionen.

Mittels JavaScript möchte ich nun vor dem Absenden überprüfen, dass eine Auswahl nicht doppelt erfolgt ist, also in den fünf Auswahllisten auch effektiv fünf verschiedene Optionen ausgewählt wurden.

Wie man zwei Formularelemente vergleicht ist mir bekannt (hier vergleiche ich die DropDownAuswahl P1 mit P2):

function pruefen(x) {

if(x.P1.value==x.P2.value) {
 alert("Du hast zweimal die gleiche Option ausgewählt.");
 x.P1.focus();
 return (false);
 // false verhindert das Abschicken
 }

Wie kann ich jedoch alle fünft DropDownAuswahlen P1-P5 gleichzeitig vergleichen? So funktionierts leider nicht:

if(x.P1.value==x.P2.value==x.P3.value==x.P4.value==x.P5.value)

Danke für eure Hilfe.

  1. hi,

    Wie kann ich jedoch alle fünft DropDownAuswahlen P1-P5 gleichzeitig vergleichen? So funktionierts leider nicht:

    if(x.P1.value==x.P2.value==x.P3.value==x.P4.value==x.P5.value)

    nee, diese syntax gibt's nun mal nicht.

    du musst P1 mit P2 vergleichen, P1 mit P3, P1 mit P4, P1 mit P5,
    dann noch P2 mit P3, P2 mit P4, P2 mit P5,
    dann noch P3 mit P4, ...

    bis du halt jede konstellation (ohne überschneidungen) einmal durch hast.

    ein anderer weg, der mir spontan einfällt:
    ein neues assoziatives array anlegen, und aus jedem feld den wert dort hineinpacken - feldwert als key. gleiche array-keys überschreiben bekanntlich das vorherige element mit diesem key - also müsste man am ende nur noch prüfen, ob es fünf elemente in diesem array gibt. wenn es weniger sind, wurde zwei oder mehr mal der selbe key benutzt, ergo gibt es doppelte auswahl(en).
    wenn du aber den nutzer noch darauf hinweisen willst, wo die doppelte (x-fache) auswahl erfolgte - dann musst du doch wieder einzeln die feldinhalte überprüfen.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. hi,

      Wie kann ich jedoch alle fünft DropDownAuswahlen P1-P5 gleichzeitig vergleichen? So funktionierts leider nicht:

      if(x.P1.value==x.P2.value==x.P3.value==x.P4.value==x.P5.value)

      nee, diese syntax gibt's nun mal nicht.

      du musst P1 mit P2 vergleichen, P1 mit P3, P1 mit P4, P1 mit P5,
      dann noch P2 mit P3, P2 mit P4, P2 mit P5,
      dann noch P3 mit P4, ...

      bis du halt jede konstellation (ohne überschneidungen) einmal durch hast.
      gruß,
      wahsaga

      Hallo wahsaga

      Danke, das hab ich mir fast gedacht...

      Am liebsten wäre mir die Variante, dass ich bei Auswahl von der OptionA im P1-Auswahlfeld, diese OptionA in den Auswahlfeldern P2-P5 ganz verschwindet und nicht mehr auswählbar ist; so müsste ich nicht mit JavaScript überprüfen. Leider hab ich aber keinen blassen Schimmer, wie ich das anstellen soll, und in der SelfHTML-Doku hab ich auch nichts dsbzgl. gefunden. Hast du da ev. einen Lösungsansatz?

      Danke und Gruss
      Roberto

      1. Danke, das hab ich mir fast gedacht...

        Bitte kein Tofu

        Am liebsten wäre mir die Variante, dass ich bei Auswahl von der OptionA im P1-Auswahlfeld, diese OptionA in den Auswahlfeldern P2-P5 ganz verschwindet und nicht mehr auswählbar ist; so müsste ich nicht mit JavaScript überprüfen. Leider hab ich aber keinen blassen Schimmer, wie ich das anstellen soll, und in der SelfHTML-Doku hab ich auch nichts dsbzgl. gefunden. Hast du da ev. einen Lösungsansatz?

        Das wäre zwar auch möglich ist aber nicht sicher da JS ausgeschaltet werden kann.

        Der ansatz von wahsaga ist nicht schlecht. ungefähr so:
        function pruefen(x)
        {
        var check = new Object();
        for(var i = 1; i < 6; i++)
        {
        var val = x.elements['P' + i][x['P' + i].selectedIndex].value;
        if(check[ val ] )
        {
        alert('ein Wert darf nicht doppelt gewählt werden!');
        return false;
        }
        check[ val ] = 1;
        }
        return true;
        }

        Struppi.

        1. Danke für dein Script, Struppi.

          Es würde mich trotzdem interessieren, wie eine mögliche Lösung mit dem Entfernen der Optionen in der Auswahlliste aussieht.

          Es reicht mir auch nur ein Lösungsansatz, weil ich da leider gar nichts finden kann in der Doku.

          Danke.

          1. Es würde mich trotzdem interessieren, wie eine mögliche Lösung mit dem Entfernen der Optionen in der Auswahlliste aussieht.

            Suchen in selfhtml nach auswahlliste
            bringt unter anderem http://de.selfhtml.org/javascript/objekte/options.htm#elemente_loeschen