Tim: Effizientere Methode gesucht

Hallo Forum,

gibt es einen Trick, um ein Dropdown Menü vorzuwählen, der weniger Code hat als meiner?

Stellt Euch nur mal vor, das Dropdown Menü hätte 500 mögliche Einträge?!

  
if ($row[0] == 0) {  
$selected_0 = 'selected';  
$selected_1 = '';  
$selected_2 = '';  
}  
elseif ($row[0] == 1) {  
$selected_0 = '';  
$selected_1 = 'selected';  
$selected_2 = '';  
}  
else {  
$selected_0 = '';  
$selected_1 = '';  
$selected_2 = 'selected';  
}  
  
<option value=\"0\" $selected_0>Offen  
<option value=\"1\" $selected_1>Gewonnen  
<option value=\"2\" $selected_2>Verloren  

Tim

  1. Mahlzeit,

    gibt es einen Trick, um ein Dropdown Menü vorzuwählen, der weniger Code hat als meiner?

    Kommt auf deinen konkreten Anwendungsfall an. In deinem Beispiel ist es kein Unterschied, wenn du es direkt im HTML schreibst.
    Wo kommen die Daten denn her?

    Stellt Euch nur mal vor, das Dropdown Menü hätte 500 mögliche Einträge?!

    Dann hast du ein Konzeptproblem. Ein so langes Dropdown ist mindestens eine Zumutung, ich halte es für unbenutzbar.

    --
    42
    1. HI,

      Dann hast du ein Konzeptproblem. Ein so langes Dropdown ist mindestens eine Zumutung, ich halte es für unbenutzbar.

      Ach was. Mit "chosen" ist das gar kein Ding.

      Tim

      1. Mahlzeit,

        Ach was. Mit "chosen" ist das gar kein Ding.

        Aus Usersicht bezweifel ich, dass ein Dropdown mit 500 Einträgen durch eine optische Anpassung benutzbar wird.
        Selbst auf einem grossen Monitor ist das heftig, auf einem Smartphone o.ä. dürfte dem Benutzer ne halbe Stunde scrollen zuviel sein.

        --
        42
        1. Meine Herren!

          Aus Usersicht bezweifel ich, dass ein Dropdown mit 500 Einträgen durch eine optische Anpassung benutzbar wird.

          Wenn der TO dieses chosen meint, dann handelt es sich dabei um mehr als eine reine optische Aufwertung. Es ist eine Sammlung von imho. sehr guten UI-Komponenten. Damit wird eine Drowdown-Liste von mehreren 100 einträgen dank SuFu wirklich bedienbar.

          --
          “All right, then, I'll go to hell.” – Huck Finn
          1. Mahlzeit,

            Wenn der TO dieses chosen meint, dann handelt es sich dabei um mehr als eine reine optische Aufwertung. Es ist eine Sammlung von imho. sehr guten UI-Komponenten. Damit wird eine Drowdown-Liste von mehreren 100 einträgen dank SuFu wirklich bedienbar.

            Ich gehe davon aus, dass er das meint. Und wenn er per Javascript aus einer Select-Box ein Input-Feld mit Autovervollständigen macht, IST das ein Konzeptfehler.

            Ein gutes Konzept wäre eben Inputfeld mit Autovervollständigen. Etwas vorhandenes nachzubilden ohne benutzbaren Fallback ist nie eine gute Lösung.

            --
            42
            1. Meine Herren!

              Mahlzeit,

              Wenn der TO dieses chosen meint, dann handelt es sich dabei um mehr als eine reine optische Aufwertung. Es ist eine Sammlung von imho. sehr guten UI-Komponenten. Damit wird eine Drowdown-Liste von mehreren 100 einträgen dank SuFu wirklich bedienbar.

              Ich gehe davon aus, dass er das meint. Und wenn er per Javascript aus einer Select-Box ein Input-Feld mit Autovervollständigen macht, IST das ein Konzeptfehler.

              Das Eingabefeld hat nach wie vor die Semantik einer <select>-Box, nämlich dass nur explizit ausgewisene Einträge ausgewählt werden können. Solche Elemente, die als <option>-Element hinzugefügt werden.

              Ein gutes Konzept wäre eben Inputfeld mit Autovervollständigen.

              Nein ein <select>-Element ist aus oben genannten Grund hier die semantisch richtige Wahl. Von einem input-Feld würde man erwarten, dass man auch Angaben machen kann, die sich von den Vorschlägen unterscheiden, eben freie Text-Eingaben. Das ist hier nicht gewünscht.

              Etwas vorhandenes nachzubilden ohne benutzbaren Fallback ist nie eine gute Lösung.

              Der benutzbare Fallback ist ja da – eine gewöhnliche select-Box. Lästig aber bedienbar. Das zählt eben zu den Nachteilen, die sich JavaScript-Verweigerer aussetzen. Diese Form der UI-Aufwertung würde ich unter Progessive-Enhancement zählen.

              --
              “All right, then, I'll go to hell.” – Huck Finn
              1. Mahlzeit,

                Der benutzbare Fallback ist ja da – eine gewöhnliche select-Box. Lästig aber bedienbar.

                Mit 500 Optionen? Na das erklär mal den Nutzern von Screenreadern, und wie erwähnt, Smartphones.
                Wenn du glaubst, da machen 500 Optionen sinn, haben wir zwei völlig unterschiedliche Ansichten von "benutzbar"

                --
                42
                1. Meine Herren!

                  Der benutzbare Fallback ist ja da – eine gewöhnliche select-Box. Lästig aber bedienbar.

                  Mit 500 Optionen? Na das erklär mal den Nutzern von Screenreadern, und wie erwähnt, Smartphones.

                  Ein Screenreader-Nutzer mit deaktiviertem JavaScript wird durch das Label und etwaige ARIA-Attribute sehr schnell erfassen können, welches Datum von ihm gefordert wird. Spätestens wenn ihm die ersten paar Einträge vorgelesen wurden, dürfte er eine Spur davon gewonnen haben und könnte mit der Eingabe auf der Tastatur beginnen, um die Vorschläge weiter einzugrenzen.

                  Der Smartphone-Benutzer wird das Sortierkriterium der Optionen erfassen können, das wird ihn in die Lage versetzten sprungartig duch die Liste zu navigieren und auch an sein Ziel zu gelangen. Die Sortierung bei solchen Datenmassen sollte klug gewählt sein, alphabetisch oder numerisch bieten sich meistens an.

                  Wenn du glaubst, da machen 500 Optionen sinn, haben wir zwei völlig unterschiedliche Ansichten von "benutzbar"

                  Deine Alternative, das freie Textfeld, bietet unendlich viele Optionen. Da muss der Nutzer schon aus Zufall eine Eingabe machen, die auch die serverseitige Validierung passiert. Das dürfte noch viel weniger benutzbar sein.

                  --
                  “All right, then, I'll go to hell.” – Huck Finn
                  1. Mahlzeit,

                    Deine Alternative, das freie Textfeld, bietet unendlich viele Optionen. Da muss der Nutzer schon aus Zufall eine Eingabe machen, die auch die serverseitige Validierung passiert. Das dürfte noch viel weniger benutzbar sein.

                    Diese Alternative betrifft den Wunsch, die Selectbox in ein Textfeld zu verwandeln, dann kann man das auch gleich machen. Ausserdem habe ich von Autovervollständigen geschrieben, also ist es absolut kein Zufall, was der User eingibt, es wird ihm ja in Schritten vorgegeben.

                    Eine Selectbox mit 500 Einträgen gehört IMO zerlegt in Teilbereiche. Ob das nun per optgroup passiert, was dann automatisiert aufgeteilt wird oder mehrere Selectboxen sind, die nacheinander befüllt werden, dürfte dann Geschmacksache sein.

                    Aber alleine schon die Datenmenge dürfte manches Endgerät in die Knie zwingen. Es gibt immer noch Settop-Boxen, Tablets und Smartphones mit wenig Ram und Singlecore.

                    Vermutlich ist es Geschmacksache, aber wenn einer meiner Programmierer etwas fabriziert, was eine Selectbox mit 500 Einträgen zur Folge hat, bekommt er mit Sicherheit keinen Auftrag mehr
                    von mir. Bisher hat aber auch noch keiner sowas abgeliefert.

                    --
                    42
  2. Om nah hoo pez nyeetz, Tim!

    gibt es einen Trick, um ein Dropdown Menü vorzuwählen, der weniger Code hat als meiner?
    Stellt Euch nur mal vor, das Dropdown Menü hätte 500 mögliche Einträge?!

    for ($k = 0; $k <= 500; $k++) {  
      [code lang=html]<option<?php if ($row[$k][$sel] == 'selected') selected?>><?=$row[$k][$name]?></option>
    

    }[/code]

    Matthias

    --
    Der Unterschied zwischen Java und JavaScript ist größer als der zwischen satt und Sattel.

    1. for ($k = 0; $k <= 500; $k++) {

      [code lang=html]<option<?php if ($row[$k][$sel] == 'selected') selected?>><?=$row[$k][$name]?></option>

      
      > }[/code]  
      >   
        
      Jups, so sollte es gehen.  
        
      Danke, Tim
      
    2. Hi,

      for ($k = 0; $k <= 500; $k++) {

      [code lang=html]<option<?php if ($row[$k][$sel] == 'selected') selected?>><?=$row[$k][$name]?></option>

      
      > }[/code]  
        
      wenn man die Optionen in einem Array hat, dann ist das natürlich die sinnvollere Methode, zumal auch deutlich weniger zu schreiben.  
        
      Ich hätte es jetzt spontan so gemacht:  
        
      ~~~php
      $count = $row[0]; ?>  
      <option value="0" <?php echo ($count-- == 0)?"selected":""; ?>>Offen</option>  
      <option value="1" <?php echo ($count-- == 0)?"selected":""; ?>>Gewonnen</option>  
      <option value="2" <?php echo ($count-- == 0)?"selected":""; ?>>Verloren</option>