Andreas Korthaus: "Wert vom rechten ins linke Auswahlfeld"

Hallo!

Ich hatte mir das schonmal gemacht, finde es leider nicht mehr und auch in SELFHTML finde ich so auf den ersten Blick nicht wie ich das nochmal gemacht habe. Ich habe 2 mehrzeilige Auswahlfelder, dazwischen 2 Button:

+------------+                       +------------+

|     << hinzufügen     |     a      |
           |                       |     b      |
           |      entfernen >>     |     c      |

+------------+                       +------------+

Man muß z.B. den Wert "a" markieren, und wenn man dann auf den Button "hinzufügen" klickt wird der Wert a dem linken Auswahlfeld hinzugefügt, und im rechten entfernt, bei "entfernen" umgekehrt.

Wie mache ich das nochmal(welche Funktionen...)? Wie ist das mit Mozilla-Kompatibilität?

Viele Grüße
Andreas

    1. Hallo,

      das auch noch:
      http://selfhtml.teamone.de/javascript/objekte/options.htm#selected

      Gruß Markus

      --
      alles wird gut...
      1. Hi!

        Danke Dir! Das hatte ich leider nicht gefunden ;-) Aber ein Problem gibt es mit multipler Auswahl: Wenn ich mehr als einen Wert auswähle, dann wird mind. einer verschluckt, also nicht in das andere Feld "übertragen". Ich mache das jetzt so:

        function Hinzufuegen() {
          for(i=0;i<document.Testform.Auswahl2.length;++i)
          {
           if(document.Testform.Auswahl2.options[i].selected == true)
           {
            NeuerEintrag = new Option(document.Testform.Auswahl2.options[i].text,document.Testform.Auswahl2.options[i].text,false,true);
            document.Testform.Auswahl.options[document.Testform.Auswahl.length] = NeuerEintrag;
          document.Testform.Auswahl2.options[i] = null;
            }
           }
         }

        Leider kann ich keine Datei hochladen, meine Internetverbindung spinnt, ich versuche es aber dann kannst Du es live sehen.

        Grüße
        Andreas

  1. Hallo!

    Noch eine Frage:

    Kann man auch "nicht ausgewählte" Werte in einer Auswahlliste mit einem Submit-Button abschicken?
    Wenn ich jetzt alle Werte die auswählen möchte vom rechten ins linke Auswahlfeld übertrage, mache ist das aus dem Grund, da nicht jeder mit ctrl eine Mehrfach-Auswahl treffen kann(usability). Ich will also alle Werte die Javascript in das linke Feld geschrieben hat, die womöglich nicht alle ausgewählt sind(wenn zwischenzeitlich wieder Werte entfernt wurden), dass diese alle beim Abschicken des Formulars, am besten in einem Array übertragen werden. Wie mache ich das?

    Grüße
    Andreas

  2. Hallo!
    Sorry wegen der vielen Postings, aber ich kann nur Beiträge unter 1 KB abschicken(daher kome ich untzen auch nicht zum Antworten, habe 3 Antworten hier stehen aber kann sie nicht abschicken :-( Ich glaube mein Provider ist Schuld)

    Hab noch ein Problem: alle Werte haben den gleichen Namen, d.h. ich bekomme einen Request-String wie:
    ?Auswahl=Goethe&Auswahl=Guildo+Horn&Auswahl=Fontane

    Aber leider überschreibt der letzte Wert alle vorherigen, wie komme ich an die? Muß ich das Auswahlfeld als Array definieren, also name="Auswahl[]", nur Javascript akzeptiert Auswahl[] nicht als Feldnamen :-( Wie kann ich das lösen?

    Viele Grüße
    Andreas

    1. Hallo Andreas,

      Hab noch ein Problem: alle Werte haben den gleichen Namen, d.h. ich bekomme einen Request-String wie:

      ?Auswahl=Goethe&Auswahl=Guildo+Horn&Auswahl=Fontane
      Aber leider überschreibt der letzte Wert alle vorherigen, wie komme ich an die? Muß ich das Auswahlfeld als Array definieren, also name="Auswahl[]", nur Javascript akzeptiert Auswahl[] nicht als Feldnamen :-( Wie kann ich das lösen?

      Du könntest auch einen Index anhängen, so in etwa: auswahl1 auswahl2
      dann musst DU kein array machen und kannst ähnlich komfortabel den "richtigen" auslesen.

      ciao
      romy

      --
      DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
      ->Alles ist gut wenn es aus Schokolade ist
      1. Hi!

        Du könntest auch einen Index anhängen, so in etwa: auswahl1 auswahl2
        dann musst DU kein array machen und kannst ähnlich komfortabel den "richtigen" auslesen.

        Und wie mache ich das? Kann ich in Javascript nicht auf ein Formular-Feld mit dem Namen select[] zugreifen? Ich habe es versucht aber schaffe es nicht.

        denn wenn ich das Formularfeld so nenne, lautet der Request-String:

        ?select%5B%5D=asdasd&select%5B%5D=asdasd&select%5B%5D=asdasdasda

        Zumindest könnte ich ja auch das anghängen und hätte dann direkt den Array. Aber wie mache ich das? Wie kann ich den Request-String beeinflussen? In diesem Fall würde es ja reichen an jeden Namen noch %5B%5D anzuhängen. wäre auf alle Fälle sauberer.

        Grüße
        Andreas

        1. In diesem Fall würde es ja reichen an jeden Namen noch %5B%5D anzuhängen. wäre auf alle Fälle sauberer.

          Du hast doch ein select-dings
          <select>
          <option name="auswahl"></option>
          <option name="auswahl"></option>
          <option name="auswahl"></option>
          </select>

          oder ?

          wer hindert dich daran zu schreiben
          name="auswahl1"
          name="auswahl2"  usw.

          ob es auch geht zu schreiben:
          name="auswahl%5B%5D"
          weiss ich nicht, einen Versuch ist es wert.

          dort wo es ankommt, kannst Du mit Stringoperationen auslesen, ob es sich um Auswahl1 oder 2 oder 3 handelt

          kann es sein, dass ich die Problematik unterschätze? Ich bin mir nicht gnaz sicher, dass ich genau vertsehe was Dein Problem ist , sorry.

          Wie man den Requeststring verändert weiss ich auch nicht. Ausser es steht Dir eine Serverseitige Scriptsprache zur Verfügung.

          ciao
          romy

          --
          DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
          ->Alles ist gut wenn es aus Schokolade ist
          1. Hallo!

            Du hast doch ein select-dings
            <select>
            <option name="auswahl"></option>
            <option name="auswahl"></option>
            <option name="auswahl"></option>
            </select>

            oder ?

            eben nicht. Ich habe(und anders geht es IMHO nicht):

            <select name="auswahl">
            <option>a</option>
            <option>b</option>
            <option>c</option>
            </select>

            die Variante um das z.B. mir PHP weiterverarbeiten zu können wäre:

            <select name="auswahl[]">
            <option>a</option>
            <option>b</option>
            <option>c</option>
            </select>

            mit den von mir beschreibenen Konsequenzen. Nur Leider kann ich dann ein Element mit dem Namen "auswahl[]" nicht mehr ansprechen. Habe zumindest keine Ahnung wie.

            wer hindert dich daran zu schreiben
            name="auswahl1"
            name="auswahl2"  usw.

            Vermutlich irgendeine HTML Spezifikation ;-)

            ob es auch geht zu schreiben:
            name="auswahl%5B%5D"
            weiss ich nicht, einen Versuch ist es wert.

            wie gesagt generiert das der Browser wenn ich den Namen "auswahl[]" verwende. Aber wie gesagt kann ich das nicht mit Javascript verändern!

            dort wo es ankommt, kannst Du mit Stringoperationen auslesen, ob es sich um Auswahl1 oder 2 oder 3 handelt

            das ist sicher kein Problem, aber mein Problem muß IMHO ium Browser und vermutlich mit Javascript gelöst werden, denn das Problem bei der Mehrfachauswahl ist es, das ich entweder bei einem nicht-Array-namen pro gewählter Option einen Parameter mit demselben Namen erhalte(oder kommt man da in PHP doch irgendwie dran? Denn es wird ja zum Server geschickt!), und wenn ich einen Array-Namen verwende kann ich mit Javascript erst gar keine Werte in das Feld schreiben, so dass es mir auch nichts bringt.

            kann es sein, dass ich die Problematik unterschätze? Ich bin mir nicht gnaz sicher, dass ich genau vertsehe was Dein Problem ist , sorry.

            Ich habe es gerade doch mal wieder geschafft die 2K große Datei hochzuladen(vielen Dank an dieser Stelle an meinen Provider für diese großzügige Geste!): http://knet-systems.de/temp/hinzu.html
            So funkitoniert das hin- und herschieben mehr oder weniger, wie gesagt wird bei mehrfachauswahl nicht _alles_ was ausgewählt wurde übertragen, vielleicht weiß ja einer von Euch warum. Beim Abschicken kann man auch den Request-String sehen.
            Wenn ich jetzt wie gesagt den Namen des Auswahlfeldes auf "auswahl[]" ändere, das entsprechend so ins Javascript schreibe, also statt:

            document.Testform.Auswahl.options[document.Testform.Auswahl.length] = NeuerEintrag;

            einfach:
               document.Testform.Auswahl[].options[document.Testform.Auswahl[].length] = NeuerEintrag;

            Gibt es eine Möglichkeit das doch irgendwie hinzubekommen?

            Wie man den Requeststring verändert weiss ich auch nicht. Ausser es steht Dir eine Serverseitige Scriptsprache zur Verfügung.

            Es geht aber um den Request-String des Browsers :-(

            Grüße
            Andreas

            1. Hallo!

              Möchte das Problem mal aufs Wesentliche reduzieren, da es mich ausnahmsweise einigermaßen dingend [sorry :-( ] interessiert ob das generell auf diese Weise möglich ist oder nicht, ein "nein" wäre mir aufgrund der Dringlichkeit sehr viel Wert, da ich dann Zeit für die Suche nach einer Alternative nutzen könnte, aber leider kenne ich keinen so "schönen" Weg wie diesen. Und ich meine das auch schonmal so oder so ähnlich irgendwo gesehen zu haben! Was bringt mit z.B. folgedes Beispiel aus SELFHTML:  http://selfhtml.teamone.de/javascript/objekte/options.htm#neue_elemente, wenn ich die so eingetragenen Daten nicht an den Server übertragen kann? Formulare auf dem Browser alleine bringen meist nicht viel! Also _muss_ das doch irgendwie gehen! Oder kennt jemand ein Beispiel wo sowas ähnliches funktioniert?

              Wenn man mal folgende Datei ausprobiert:

              <html><body>
              <h1>Pizzeria Fantasia</h1>
              <form action="select.htm">
              <select name="Pizza" size="3"
              onchange="alert(this.form.Pizza.options[this.form.Pizza.selectedIndex].text)">
              <option>Pizza Napoli</option>
              <option>Pizza Funghi</option>
              <option>Pizza Tonno</option>
              </select>
              </form>
              </body></html>

              das funktioniert sehr gut.

              <html><body>
              <h1>Pizzeria Fantasia</h1>
              <form action="select.htm">
              <select name="Pizza[]" size="3"
              onchange="alert(this.form.Pizza[].options[this.form.Pizza[].selectedIndex].text)">
              <option>Pizza Napoli</option>
              <option>Pizza Funghi</option>
              <option>Pizza Tonno</option>
              </select>
              </form>
              </body></html>

              so habe ich es z.B. versucht, ziemlich klar das das nicht so gehen kann, aber wie sonst? Habe auch Pizza[] und Pizza%5B%5D... bringt nichts. Oder muß ich serverseitig auf eine andere Programmiersprache umsteigen, denn meines Wissens hat PERL z.B. Zugriff auf den kompletten Request-String. Nur will ich das wenn nur irgend möglich vermeiden, denn in demselben Formular befinden sich bereits 3 Upload-Felder etc., serverseitig ist das im Prinzip schon fertig, wenn ich das alles in PERL programmieren müßte würde das vermutlich sehr lange dauern(PERL-Anfänger).

              Kann ich es irgendwie anders schaffen die ausgewählten Werte so in den Request-String zu schreiben, das PHP damit was anfangen kann?

              Vielen Dank!

              Grüße
              Andreas

              1. ... das dauert immer so lange und solche Sachen gehen in PHP doch sooooo viel schöner ;-)
                Sachdienliche Hinweise die zur Vermeidung von PERL führen bitte in diesem Thread posten *g*

                Grüße
                Andreas

                1. Hallo Andreas,

                  ... das dauert immer so lange und solche Sachen gehen in PHP
                  doch sooooo viel schöner ;-)

                  Ganz im Gegenteil.

                  Sachdienliche Hinweise die zur Vermeidung von PERL führen
                  bitte in diesem Thread posten *g*

                  $qs = getenv("QUERY_STRING");

                  Gruesse,
                   CK

                  1. Hi Christian!

                    ... das dauert immer so lange und solche Sachen gehen in PHP
                    doch sooooo viel schöner ;-)

                    Ganz im Gegenteil.

                    Kommt drauf an, das ich in PHP nicht an den original POST-Request komme hat fast dazu geführt das ich wild auf meine armen PC einschlage, aber vor allem Sessions und Datei-Upload ist IMHO in PHP ganz praktisch gelöst. Aber ich kenne PERL gut genug um zu wissen das ich das besser nicht gesagt hätte ;-)

                    Sachdienliche Hinweise die zur Vermeidung von PERL führen
                    bitte in diesem Thread posten *g*

                    $qs = getenv("QUERY_STRING");

                    Leider brauche ich wegen des Datei-Uploads POST! Und dann ist der lustige "Query-String" leer.

                    Hat sich ja aber bereits erledigt!

                    Grüße
                    Andreas