Der Martin: options selected kontrolieren und an Variable übergeben

Beitrag lesen

Hi,

Ich möchte die ausgewählte Option aus einer Auswahlliste auslesen und als Name einer Variable (eigentlich arrays) nehmen.

es ist normalerweise eine ganz schlechte Idee, _Namen_ von Variablen aus dem Programmablauf zu bestimmen. Da gibt es fast immer bessere, saubere Methoden.

function Absende () {

   for (i = 0; i < document.gdf.Wname.length; ++i) {
  
Wenn ich den HTML-Code danebenlege, mit dem dieser Programmabschnitt arbeitet, dann liegt schon hier der Hase im Pfeffer. Du adressierst das select-Element, das hat aber keine length-Eigenschaft, nur dessen options-Collection.  
  

> `		    if (document.gdf.Wname.options[i].selected == true) {`{:.language-javascript}  
  
"Wenn es wahr ist, dass document.gdf.Wname.options[i].selected wahr ist, ..."  
Die explizite Abfrage auf Gleichheit mit der boolschen Konstante true ist hier zwar nicht falsch, aber unnötig kompliziert.  
  
`		    if (document.gdf.Wname.options[i].selected)`{:.language-javascript}  
  
... ist nicht nur kürzer und übersichtlicher, sondern auch intuitiver zu lesen.  
  

> `		      window[document.gdf.Wname.options[i].value];`{:.language-javascript}  
  
Was ist das? Das ist ein lesender Zugriff auf window["foo"], wobei du den gelesenen Wert (vermutlich undefined) aber nicht weiter verwendest, sondern sofort wieder vergisst. Die einzige Auswirkung dieser Zeile ist, dass die Variable angelegt wird, aber noch keinen definierte nWert hat.  
  

> ~~~javascript

			return true;  

> 			break;  
> 			}

Wozu das break hier? Mit dem return-Statement wird die Funktion eh sofort verlassen, und die Schleife damit erst recht.

if (document.gdf.Wname.options[i].selected != true) {

Siehe oben. Das möchte eigentlich so heißen:

if (!document.gdf.Wname.options[i].selected)

Aber warum überhaupt alle option-Elemente in einer Schleife abfragen, ob sie "selected" sind? Dafür gibt's doch selectedIdex des select-Elementobjekts. Das ist eindeutig und direkt.

So long,
 Martin

--
PCMCIA: People Can't Memorize Computer Industry Acronyms
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(