lina-: SelectedIndex -1 macht Probleme

moin liebes Forum :)

ich bin heute auf ein grundsätzliches Problem gestoßen, bei dem ich mir keine Rat mehr weiss.

Zur Veranschaulichung habe ich das Beispiel aus der Doku mal abgeändert:

  
<html><head><title>Test</title>  
<script type="text/javascript">  
function CheckAuswahl () {  
  alert("check auswahl");  
  if (document.Testform.Auswahl.selectedIndex == 2)  
    document.Testform.Auswahl.selectedIndex = -1;  
}  
</script>  
</head><body>  
<form name="Testform" action="">  
<select name="Auswahl" onchange="CheckAuswahl()" size="1">  
<option>Goethe</option>  
<option>Schiller</option>  
<option>Guildo Horn</option>  
<option>Homer</option>  
<option>Fontane</option>  
</select>  
</form>  
</body></html>  

Was habe ich geändert?
Zur Kontrolle habe ich in das Skript eine Ausgabe gesetzt. Die wichtige Änderung besteht aber darin, dass der selectedIndex auf -1 gesetzt wird, falls Guildo Horn gewählt wurde.

Korrekterweise wird in diesem Fall auch "nichts" ausgewählt.
Aaaaber: klickt man nun auf den ersten Eintrag (so dass der wieder aktiv ist), wird er zwar ausgewählt, aber das Skript nicht ausgeführt.

Weiss jemand Rat?

liebe Grüße aus Berlin
lina-

--
Dinge aus dem linaland
Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
  1. Hi,

    Korrekterweise wird in diesem Fall auch "nichts" ausgewählt.

    das halte ich nicht für korrekt - "nichts" gibt's nicht. Es ist immer ein Eintrag ausgewählt ...

    Aaaaber: klickt man nun auf den ersten Eintrag (so dass der wieder aktiv ist), wird er zwar ausgewählt, aber das Skript nicht ausgeführt.

    ... und zwar augenscheinlich der erste. Wenn dieser nicht angezeigt wird, dann hast Du den Browser offenbar verwirrt.

    Weiss jemand Rat?

    Halte einen Eintrag vor, der Deiner Definition von "nichts" entspricht.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. moin Cheatah :)

      Korrekterweise wird in diesem Fall auch "nichts" ausgewählt.

      das halte ich nicht für korrekt - "nichts" gibt's nicht. Es ist immer ein Eintrag ausgewählt ...

      Zitat aus der Doku zu "selectedIndex": Speichert, ob oder dass ein bestimmter Eintrag einer Auswahlliste selektiert ist. Wenn nichts ausgewählt ist, dann ist in der Eigenschaft der Wert -1 gespeichert.

      Weiss jemand Rat?

      Halte einen Eintrag vor, der Deiner Definition von "nichts" entspricht.

      Das wäre eine Möglichkeit... aber ich finde sie ziemlich umständlich.
      Mal sehen, ob ich das in das Projekt eingebaut kriege...

      Danke trotzdem :)

      liebe Grüße aus Berlin
      lina-

      --
      Dinge aus dem linaland
      Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
      1. Hi,

        Zitat aus der Doku zu "selectedIndex": Speichert, ob oder dass ein bestimmter Eintrag einer Auswahlliste selektiert ist. Wenn nichts ausgewählt ist, dann ist in der Eigenschaft der Wert -1 gespeichert.

        bei welcher Form von <select> ist es möglich, dass nichts ausgewählt ist, und liegt diese bei Dir vor? ;-)

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. moin Cheatah :)

          bei welcher Form von <select> ist es möglich, dass nichts ausgewählt ist, und liegt diese bei Dir vor? ;-)

          In Abhängigkeit einer Mehrfachauswahl soll die einfache Auswahl gesetzt werden.
          Wird nun bei der Mehrfachauswahl mehr als ein Eintrag selektiert soll in der einfachen Auswahl nichts selektiert sein.

          Klar könnte man die einfache Auswahl einfach weglassen... aber das möchte der Kunde nicht. Und ich möchte auch nicht weiter darüber diskutieren.

          Fakt ist, ich brauche eine Möglichkeit um dieses Problem zu lösen. Momentan befolge ich deinen Rat und baue in die einfache Auswahl "mehrere" als Möglichkeit ein. Das zieht aber noch einen riesigen Rattenschwanz hinterher... zum Beispiel muss dann sichergestellt sein, dass in der Mehrfachauswahl die "mehreren" Möglichkeiten auch ausgewählt _werden_

          liebe Grüße aus Berlin
          lina-

          --
          Dinge aus dem linaland
          Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
          1. Hallo Lina,

            In Abhängigkeit einer Mehrfachauswahl soll die einfache Auswahl gesetzt werden.
            Wird nun bei der Mehrfachauswahl mehr als ein Eintrag selektiert soll in der einfachen Auswahl nichts selektiert sein.

            Und wenn du die einfache Auswahl dynamisch füllst?
            Die Liste mit new Option() befüllen bzw. mit element.options[]=null leeren.

            Wäre das nicht eine Alternative?

            Grüße,

            Jochen

            --
            Kritzeln statt texten:
            Scribbleboard
            1. moin Maxx :)

              Und wenn du die einfache Auswahl dynamisch füllst?
              Die Liste mit new Option() befüllen bzw. mit element.options[]=null leeren.

              Wäre das nicht eine Alternative?

              Leider nicht. Die Optionen sind ja weitestgehend die gleichen... und ich kann eben nicht mehrere Optionen in der einfachen Auswahl selektieren ;)

              Ich gehe derzeit Cheatahs Vorschlag nach und der scheint sehr gut zu funktionieren.

              liebe Grüße aus Berlin
              lina-

              --
              Dinge aus dem linaland
              Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
              1. Hallo Lina,

                ich habe mich vermutlich etwas undeutlich ausgedrückt. Meine Idee war:

                Wird nun bei der Mehrfachauswahl mehr als ein Eintrag selektiert
                soll in der einfachen Auswahl nichts selektiert sein.

                In der Mehrfachauswahl prüfst du im onclick() die Anzahl der Selektionen.

                Wenn Anzahl == 1 fülle die einfache Auswahl mit den <option>
                Wenn Anzahl >  1 lösche alle <option> aus der einfachen Auswahl

                Ich gehe derzeit Cheatahs Vorschlag nach und der scheint sehr gut zu funktionieren.

                Vermutlich ist das für den Anwender auch leichter zu verstehen ....

                Grüße,

                Jochen

                --
                Kritzeln statt texten:
                Scribbleboard
      2. Hallo Lina,

        Wenn nichts ausgewählt ist, dann ist in der Eigenschaft der Wert -1 gespeichert.

        Hier muss zwischen einer "Dropdown-Liste" (size=1) und normalen Auswahllisten (size>1) unterschieden werden. "Nichts" auszuwählen ist tatsächlich nur in normalen Auswahllisten möglich.

        Grüße,

        Jochen

        --
        Kritzeln statt texten:
        Scribbleboard
  2. ich bin heute auf ein grundsätzliches Problem gestoßen, bei dem ich mir keine Rat mehr weiss.

    und einen grundsätzlichen Hinweis von mir.

    function CheckAuswahl () {
      alert("check auswahl");
      if (document.Testform.Auswahl.selectedIndex == 2)
        document.Testform.Auswahl.selectedIndex = -1;
    }

    ...

    <select name="Auswahl" onchange="CheckAuswahl()" size="1">

    Das läßt sich flexibler gestallten:

    <select name="Auswahl" onchange="CheckAuswahl(this)">

    function CheckAuswahl (el) {  
       alert("check auswahl");  
       if (el.selectedIndex == 2)  
         el.selectedIndex = -1;  
    }  
    
    

    Struppi.

    --
    Javascript ist toll (Perl auch!)
    1. moin Struppi :)

      ich bin heute auf ein grundsätzliches Problem gestoßen, bei dem ich mir keine Rat mehr weiss.

      und einen grundsätzlichen Hinweis von mir.

      dann setz das in den Bugtracker...

      liebe Grüße aus Berlin
      lina-

      --
      Dinge aus dem linaland
      Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
      1. ich bin heute auf ein grundsätzliches Problem gestoßen, bei dem ich mir keine Rat mehr weiss.

        und einen grundsätzlichen Hinweis von mir.

        dann setz das in den Bugtracker...

        Wieso? Das ist kein Fehler in selfhtml. Das ist lediglich eine einfachere Möglichkeit unter bestimmten Umständen auf Formulare und deren Felder zuzugreifen. Diese Art der Schreibweise ist nicht immer zu empfehlen, aber in deinem Beispiel haben die Umstände gepaßt und es ist auch zu empfehlen.

        Struppi.

        --
        Javascript ist toll (Perl auch!)
        1. moin Struppi :)

          Wieso? Das ist kein Fehler in selfhtml. Das ist lediglich eine einfachere Möglichkeit unter bestimmten Umständen auf Formulare und deren Felder zuzugreifen. Diese Art der Schreibweise ist nicht immer zu empfehlen, aber in deinem Beispiel haben die Umstände gepaßt und es ist auch zu empfehlen.

          es ist aber nicht "mein" Beispiel sondern ein Beispiel aus der Doku. Punkt.

          liebe Grüße aus Berlin
          lina-

          --
          Dinge aus dem linaland
          Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
          1. es ist aber nicht "mein" Beispiel sondern ein Beispiel aus der Doku. Punkt.

            Ich weiß nicht warum du jetzt so angenervt klingst.

            Mir ging es lediglich darum einen Tipp zu geben, der so nicht in der Doku steht. Und sicher auch sinnvoll ist, falls jemand mal das Archiv durchsucht und auf diesen Beitrag stößt. Was du mit dem Tipp machst ist deine Sache, aber ich wollte auf keinen Fall dir irgendwie damit zu nahe treten. Punkt.

            Struppi.

            --
            Javascript ist toll (Perl auch!)
            1. moin Struppi :)

              Ich weiß nicht warum du jetzt so angenervt klingst.

              Weil ich immer wieder das Gefühl habe, dass du nur nach Fehlern von mir suchst.

              Klar ist dein Tipp gut und wenn ich ein solches Konstrukt verwenden würde, würde ich ihn auch begrüßen und verwenden.

              Aber ich hatte dieses Beispiel nur aus der Doku genommen um zu veranschaulichen, was ich meine. Ergo ist dein Tipp im Bugtracker wesentlich besser aufgehoben (auch wenn es in dem Sinne ja kein Fehler ist).

              Solche Tipps von dir sind gold Wert, wenn du sie später im Wiki direkt in die Doku schreiben kannst.

              liebe Grüße aus Berlin
              lina-

              --
              Dinge aus dem linaland
              Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
              1. Ich weiß nicht warum du jetzt so angenervt klingst.

                Weil ich immer wieder das Gefühl habe, dass du nur nach Fehlern von mir suchst.

                Ich schaue in der Regel nicht nach den Namen, wenn ich mir Beiträge anschaue (es gibt zwar ein paar Pappenheimer, da gehörst du aber nicht zu) und dann schaue ich über den Beiträg und lese die anderen Antworten und fand das eine sinnvolle Ergänzung zum bisher gesagten. Wären keine Antworten vorhanden gewesen hätte ich auf die Frage geantwortet.

                Aber ich hatte dieses Beispiel nur aus der Doku genommen um zu veranschaulichen, was ich meine. Ergo ist dein Tipp im Bugtracker wesentlich besser aufgehoben (auch wenn es in dem Sinne ja kein Fehler ist).

                Wie gesagt es ist kein Fehler und in den Butracker gehört das sicher nicht, da das Beispiel ja richitg ist. Aber so eine Anmerkung gehört meiner Meinung nach in's Archiv, da dort keiner mehr irgendwelche Ergänzungen machen kann und irgendwann landet der Thread im Archiv.

                Solche Tipps von dir sind gold Wert, wenn du sie später im Wiki direkt in die Doku schreiben kannst.

                Seh ich anders. An der konkreten Stelle hat der Tipp nichts zu suchen, da dieser Tipp u.U. Anfänger verwirren kann.

                Struppi.

                --
                Javascript ist toll (Perl auch!)
  3. hallo lina-,

    im ie funktioniert es, im firefox nicht. ich könnte mir vorstellen, das dem leeren eintrag, der mit -1 gesetzt wird, ebenfalls der index 0 zugewiesen wird - und somit greift onchange nicht mehr.

    grüße basti