Joshua: ... Selektion in einer Auswahlliste abfragen

Hallo Beate,

ich glaube jetzt habe ich es kapiert! Die Sache hat zwar noch einen "Schönheitsfehler" (es ist immer dasselbe Element aktiv, welches auch nicht bei "onChange" reagiert), aber dafür gibt es einen Workaround (Konstanter Text ("Überschrift") im ersten Element, dann bei jeder Selektion Anzeige des zugehörigen Textes in diesem ersten Element).

Vielen Dank für Deine Hilfe!

Referenz (wegen Schwanzabschneider ;-)):
Archiv: http://www.teamone.de/selfhtml/sfarchiv/1999_4/index.htm#a3
Datum: 10.12.99
Themenbereich:JAVASCRIPT
Thema: Selektion in einer Auswahlliste abfragen

  1. Hallo Joshua,

    ich glaube jetzt habe ich es kapiert! Die Sache hat zwar noch einen "Schönheitsfehler" (es ist immer dasselbe Element aktiv, welches auch nicht bei "onChange" reagiert)

    Tja, wenn ich Dein Problem mal genauer zu sehen bekommen koennte, dann koennte man den Schoenheitsfehler vielleicht auch noch herausbekommen.

    Viele Gruesse

    Beate Mielke

    1. Hallo Beate,

      Tja, wenn ich Dein Problem mal genauer zu sehen bekommen koennte, dann koennte man den Schoenheitsfehler vielleicht auch noch herausbekommen.

      Eigentlich ähnelt die Sache dem schon von Dir verwendeten Beispiel-Code:

      <html>
      <head>
      <title>Beispiel</title>
      <script language="JavaScript" type="text/javascript">
      <!--
      function init_was() {
      return false;   /* zum Testen */
      }

      function start_was() {
      return false;   /* zum Testen */
      }

      function tu_was() {
      /* Hier soll immer dann eine entsprechende Aktion ausgefuehrt werden,
      wenn ein Wechsel zu einem neuen Listenelement erfolgt ODER wenn das
      bereits aktive Element nochmals selektiert wurde */

      return false;   /* zum Testen */
      }
      //-->
      </script>
      </head>
      <body onLoad="init_was()">
      <form name="sel" action="/CGI-BIN/start.exe" method=post onSubmit="return start_was()">
      <select name="zeit" size=1 onChange="tu_was()">
      <option value=1"">Aktion 1</option>
      <option value=2"">Aktion 2</option>
      <option value=3"">Aktion 3</option>
      </select>
      <input type=submit value="Start">
      </form>
      </body>
      </html>

      (Der Code ist stark gekürzt und hoffentlich noch lauffähig, ich hab's nicht mehr getestet.)

      Danke für Deine Mühe!
      Josh

      1. Hallo Joshua,

        Eigentlich ähnelt die Sache dem schon von Dir verwendeten Beispiel-Code:

        <html>
        <head>
        <title>Beispiel</title>
        <script language="JavaScript" type="text/javascript">
        <!--
        function init_was() {

        »»  return false;   /* zum Testen */
        »»  }

        function start_was() {

        »»  return false;   /* zum Testen */
        »»  }

        function tu_was() {
        /* Hier soll immer dann eine entsprechende Aktion ausgefuehrt werden,
        wenn ein Wechsel zu einem neuen Listenelement erfolgt ODER wenn das
        bereits aktive Element nochmals selektiert wurde */

        »»  return false;   /* zum Testen */
        »»  }

        //-->
        </script>
        </head>
        <body onLoad="init_was()">
        <form name="sel" action="/CGI-BIN/start.exe" method=post onSubmit="return start_was()">
        <select name="zeit" size=1 onChange="tu_was()">
        <option value=1"">Aktion 1</option>
        <option value=2"">Aktion 2</option>
        <option value=3"">Aktion 3</option>
        </select>
        <input type=submit value="Start">
        </form>
        </body>
        </html>

        (Der Code ist stark gekürzt und hoffentlich noch lauffähig, ich hab's nicht mehr getestet.)

        Ich versuche es nochmal anders zu erklaeren. Normalerweise ist es so, dass nach dem Ausloesen von "onChange=tu_was()" eine NEUE Option in dem Auswahlmenue sichtbar ist. Und jetzt ist es wichtig, dass Du INNERHALB der Funktion tu_was() mit der reset()-funktion die Menueauswahl in ihren urspruenglichen Zustand zuruecksetzt. Und zwar muss das dort passieren BEVOR die Funktion das tut, wofuer sie eigentlich gedacht war. Wenn Du das machst kommt der Fall "gleiche Option zweimal hintereinander auswaehlen" gar nicht mehr vor. Dass die Sache in meinem Beispiel (das ja bereits im Archiv ist) aus drei anstatt aus nur einer Zeile besteht, liegt daran, dass NUR SO es auch von Netscape angenommen wird.

        Falls Du das nicht hinkriegst, brauche ich noch Deine Funktion tu_was(), die koennte ich Dir dann noch fuer Deinen speziellen Fall umschreiben.

        Viele Gruesse

        Beate Mielke

        1. Hallo Beate!

          Ich versuche es nochmal anders zu erklaeren. Normalerweise ist es so, dass nach dem Ausloesen von "onChange=tu_was()" eine NEUE Option in dem Auswahlmenue sichtbar ist.

          Genau. Und dieses Normalverhalten soll bei Auswahl einer neuen Option auch nach wie vor erhalten bleiben! Bei Deiner Lösung ist das allerdings nicht der Fall, weil ja durch den Aufruf von "reset()" der VORHERIGE Wert angezeigt wird.
          Wohlgemerkt: ich rede hier nur von dem nach Abschluß von "tu_was()" in der Auswahlliste ANGEZEIGTEN Wert.

          Vielleicht hast Du da ja noch eine Idee!?

          Grüße
          Josh

          1. Hi Josh
            Falls ich die Loesung von Beate richtig verstanden habe hier nochmal ne Erklaerung:
            Der Knackpunkt in der Vorgehensweise besteht gerade darin, dass vor dem Abschluss von tu_was() wieder der Startwert (der nicht anwaehlbar ist!) eingestellt wird. Das ist zwingend notwendig!! da Netscape bei onchange eben nur bei einer Veraenderung etwas tut. (Wie du ja schon beobachtet hast). Das heisst der angezeigte Wert kann durch onchange nicht aufgerufen werden.
            Falls ich das ganze nicht richtig verstanden habe lass ich mich gerne ;-)) vom Gegenteil ueberzeugen.  
            Tschau Holger

            1. Hallo Holger, hallo Josh,

              Falls ich die Loesung von Beate richtig verstanden habe hier nochmal ne Erklaerung:
              Der Knackpunkt in der Vorgehensweise besteht gerade darin, dass vor dem Abschluss von tu_was() wieder der Startwert (der nicht anwaehlbar ist!) eingestellt wird. Das ist zwingend notwendig!! da Netscape bei onchange eben nur bei einer Veraenderung etwas tut. (Wie du ja schon beobachtet hast). Das heisst der angezeigte Wert kann durch onchange nicht aufgerufen werden.

              Ganz genau so habe ich es gemeint.
              Wenn Du also trotzdem moechtest, dass der neue Wert weiterhin sichtbar bleibt, dann ist onChange nicht mehr der richtige Eventhandler.
              Dann muesste das ganze noch einmal komplett umgeschrieben werden. Aber das werde ich dann wohl nicht mehr uebernehmen.
              Sonst sieh Dir halt mal das Auswahlmenue von SelfHTML (die Quickbar) an. Da wird das Problem allerdings von vornherein ganz anders angegangen.

              viele Gruesse

              Beate Mielke