globe: <select> und der Wert der gewählten Option

n'abend,

im Zusammenhang mit <select>-Elementen gibt es immer wieder das Bedürfnis den Wert der aktuell gewählten Option abzufragen. Hierfür gibt es zwei (nennenswerte) Möglichkeiten. Um das ganze etwas anschaulicher zu machen hier ein wenig Beispielcode:

<select onchange="changed( this );">  
  <option value="0">null</option>  
  <option value="1">eins</option>  
  <option value="2">zwei</option>  
</select>

Man kann nun (wie bspw. in in DOM - neue Knoten und diversen anderen Beispielen in der SelfWelt ) folgendermaßen auf den Wert zugreifen:

function changed( obj )  
{  
  alert( 'gewählter Wert: ' obj.options[ obj.selectedIndex ].value );  
}

Man kann aber auch auf das Attribut value des <select>-Elements zugreifen, zumindest suggerieren das die W3C-DOM-Level2 Spezifikation des <select>-Elements und die SELFHTML-eigene Javascript-HTML-Referenz des <select>-Elements:

function changed( obj )  
{  
  alert( 'gewählter Wert: ' obj.value );  
}

Beide Varianten funktionieren sowohl im Firefox, Safari, als auch im IE6 einwandfrei.[1]

Ich meine mich aber daran erinnern zu können, dass die zweite Methode (u.A. von SELFHTML-Forumsleuten) missbilligt wird. Was ich nun suche ist ein triftiger Grund, warum die zweite (kürzere) Methode nicht eingesetzt werden sollte. Alternativ darf man mich auch gerne darauf hinweisen, dass mein Hirnfurz ausgelüftet werden möchte :)

[1] andere Browser stehen mir derzeit nicht zum Testen zur Verfügung.

weiterhin schönen abend...

--
Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
  1. Liebe(r) globe,

    <select onchange="changed( this );">

    <option value="0">null</option>
      <option value="1">eins</option>
      <option value="2">zwei</option>
    </select>

    
    >   
    > ~~~javascript
    
    function changed( obj )  
    
    > {  
    >   alert( 'gewählter Wert: ' obj.options[ obj.selectedIndex ].value );  
    > }
    
    

    function changed( obj )

    {
      alert( 'gewählter Wert: ' obj.value );
    }

    |  
    
    > Ich meine mich aber daran erinnern zu können, dass die zweite Methode (u.A. von SELFHTML-Forumsleuten) missbilligt wird.  
      
    das könnte wahrscheinlich daran liegen, dass zweitere Methode keine Möglichkeit lässt, zwischen dem Wert des "value"-Attributes und dem Inhalt des <option>-Elementes zu unterscheiden.  
      
    Ich habe es nicht getestet, aber was ist mit obj.nodeValue, oder obj.innerText?  
      
    Liebe Grüße aus [Ellwangen](http://www.ellwangen.de/),  
      
    Felix Riesterer.
    
    1. n'abend,

      Liebe(r) globe,

      die Klammern darfst du dir sparen, den Inhalt jedoch nicht ;)

      das könnte wahrscheinlich daran liegen, dass zweitere Methode keine Möglichkeit lässt, zwischen dem Wert des "value"-Attributes und dem Inhalt des <option>-Elementes zu unterscheiden.

      Das ist korrekt. selectObj.value enthält den Wert der aktuell gewählten Option. An den Text (/Name/whatever) kommt man "nur" über selectObj.options[ selectObj ].text

      Ob das allerdings die grundsätzliche Ablehnung von selectObj.value legitimiert, wage ich zu bezweifeln.

      weiterhin schönen abend...

      --
      Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
      sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
  2. hi,

    Ich meine mich aber daran erinnern zu können, dass die zweite Methode (u.A. von SELFHTML-Forumsleuten) missbilligt wird.

    Theoretisch gibt's an der nichts auszusetzen. Aber praktisch macht sie im IE unter bestimmten Umständen Probleme - vor allem glaube ich bei dynamischer Erzeugung von Options zur Laufzeit. Kann's nicht mehr genau sagen, erinnere mich nur das problem schon mal gehabt zu haben.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }