Werner: Problem mit multiple select

Hallo,

ich möchte jedesmal, wenn ein Eintrag in einer Auswahlliste markiert wird , einen Kommentar in die Statusleiste schreiben. Leider funktioniert das folgende Beispiel nicht richtig. Wenn ich z.B. auswahl 2 markiere und anschliessend auswahl 5, wechselt auch die Anzeige in der Statusleiste. Mache ich das ganze jedoch umgekehrt bleibt in der Statusleite der Kommentar zu auswahl 5 stehen. Kann mir jemand weiterhelfen ?

Gruß Werner

<html><head><title>Test</title>
  <script language="JavaScript">
  function CheckAuswahl()
  {
     if(document.Testform.Auswahl.options[0].selected == true)
        window.status='1.Möglichkeit ausgewählt';
     if(document.Testform.Auswahl.options[1].selected == true)
        window.status='2.Möglichkeit ausgewählt';
     if(document.Testform.Auswahl.options[2].selected == true)
        window.status='3.Möglichkeit ausgewählt';
     if(document.Testform.Auswahl.options[3].selected == true)
        window.status='4.Möglichkeit ausgewählt';
      if(document.Testform.Auswahl.options[4].selected == true)
        window.status='5.Möglichkeit ausgewählt';
  }
  </script>
  </head><body>
  <form name="Testform">
  <select name="Auswahl" size=5 onChange="CheckAuswahl()" multiple>
  <option>auswahl 1
  <option>auswahl 2
  <option>auswahl 3
  <option>auswahl 4
  <option>auswahl 5
  </select>
  </form>
  </body></html>

  1. hi,

    das liegt natuerlich daran, dass du deine abfragen nacheinander machst und somit die letzte Abfrage den lesbaren window-status erzeugt.
    Ein Alternativ-variante koennte ich dir mal vorstellen:

    <html><head><title>Test</title>
        <script language="JavaScript"><!--
        function CheckAuswahl()
        {
        var m=new Array('erste','zweite','dritte','vierte','fuenfte');
        var i,s,z;
            for (i=4,s='',z=0;i>=0;i--)
            {
                if (document.Testform.Auswahl.options[i].selected == true)
                {
                    z++;
                    if (z == 2) s=' und '+s;
                    if (z > 2) s=', '+s;
                    s=m[i]+s;
                }
            }
            window.status=s+' Moeglichkeit ausgewaehlt';
        }
      //--></script>
      </head><body>
      <form name="Testform">
      <select name="Auswahl" size=5 onChange="CheckAuswahl()" multiple>
      <option>auswahl 1</option>
      <option>auswahl 2</option>
      <option>auswahl 3</option>
      <option>auswahl 4</option>
      <option>auswahl 5</option>
      </select>
      </form>
      </body></html>

    probiers mal aus, vielleicht gefaellts dir ja .-))

    noch ein hinweis: in der statuszeile am besten _keine_ sonderzeichen/Umlaute verwenden..

    cua

    n.d.p.

    1. Hi,

      ich glaube ich habe mein Problem etwas unklar formuliert.
      Gibt es eine  Möglichkeit in einem multiple select -Feld
      bei Funktionsaufrufen mit dem onChange -Eventhandler
      den Index des geänderten Eintrags zu ermitteln ?

      Danke

      Werner

      1. hi,

        Gibt es eine  Möglichkeit in einem multiple select -Feld
        bei Funktionsaufrufen mit dem onChange -Eventhandler
        den Index des geänderten Eintrags zu ermitteln ?

        nunja, was ich schon beim ersten Mal versucht habe, rueberzubringen, ist: Du kannst ja _gleichzeitig_ mehrere Felder anwaehlen. WAS willst du dann anzeigen??
        Hier eine Loesung, wenn der Nutzer so friedfertig ist und immer nur ein Feld anwaehlt:

        <html><head><title>Test</title>
          <script language="JavaScript"><!--
          var letzter=-1;
          function CheckAuswahl()
          {
             for (i=0;i<5;i++)
             {
                 if ((document.Testform.Auswahl.options[i].selected == true) && (letzter != i))
                 {  letzter=i;
                     window.status=(i+1)+'. Moeglichkeit ausgewaehlt';
                     break;
                 }
             }
          }
          //--></script>
          </head><body>
          <form name="Testform">
          <select name="Auswahl" size=5 onChange="CheckAuswahl()" multiple>
          <option>auswahl 1</option>
          <option>auswahl 2</option>
          <option>auswahl 3</option>
          <option>auswahl 4</option>
          <option>auswahl 5</option>
          </select>
          </form>
          </body></html>

        1. Sorry, daß ich mich so blöd anstelle.  Auf die Gefahr hin,
          daß ich mich komplett blamiere:

          Mir ist klar, daß der Benutzer mehrere Felder markieren kann.
          Aber ich will jedesmal wenn er ein Feld auswählt oder die
          Markierung eines Feldes durch nochmaliges Klicken aufhebt,
          den Index genau dieses Feldes ermitteln. Mich interessiert also
          nur das Feld, das geändert wurde, denn ich will genau zu diesem
          eine Info in die Statusleiste schreiben. Daher dachte ich auch an
          den Event-Handler onChange.

      2. Hi Werner
        Ja das ist moeglich, aber nur mit ein bischen Javascript"Programmierung"
        Was du machen musst, ist nach jeder Aenderung speichern, welche Eintraege angeklickt wurden.
        Das kann man z.B in einem Array machen, wo jeweils der entsprechende Eintrag auf true gesetzt wird, falls er ausgewaehlt wurde.
        Ein zweiter Array, dem die aktuell angeklickten Eintraege zugewiesen werden wird dann mit dem "alten" verglichen.
        Ich hab mal ein kleines Script gebastelt, was hoffentlich das macht, wonach du suchst:
        <html>
        <head>
        <title>Test</title>
        <script language="JavaScript">
        <!--
        var hilf1=new Array(false,false,false,false,false);
        var hilf2=new Array(false,false,false,false,false);
        function test(a,b) {
        if (b==true) alert("Auswahl Nr."+(a+1)+" wurde hinzugefuegt");
        else alert("Auswahl Nr."+(a+1)+" wurde geloescht");
        }
        function CheckAuswahl()
          {
        for (i=0;i<document.Testform.Auswahl.length;i++){
          hilf1[i]=document.Testform.Auswahl[i].selected;
        }
        for (i=0;i<document.Testform.Auswahl.length;i++)
        {
        if (hilf2[i]!=hilf1[i]){
        if (hilf1[i]==true)  test(i,true);
        else test(i,false);
        }
        }
        for (i=0;i<document.Testform.Auswahl.length;i++)
        {
        hilf2[i]=hilf1[i];
        hilf1[i]=false;
        }
        }

        //-->
        </script>
        </head><body>
        <form name="Testform">
        <select name="Auswahl" size=5 onchange="CheckAuswahl()" multiple>
        <option>auswahl 1
        <option>auswahl 2
        <option>auswahl 3
        <option>auswahl 4
        <option>auswahl 5
        </select>
        </form>
        </body></html>

        Wenn noch fragen sind, poste nochmal
        Tschau Holger