Jake: options selected kontrolieren und an Variable übergeben

Hallo,

Ich möchte die ausgewählte Option aus einer Auswahlliste auslesen und als Name einer Variable (eigentlich arrays) nehmen. Wenn nichts in der Auswahlliste ausgewählt ist soll man dazu aufgefordert werden. Leider will das nicht so wie ich will: ~~~javascript function Absende () {
for (i = 0; i < document.gdf.Wname.length; ++i) {
    if (document.gdf.Wname.options[i].selected == true) {
      window[document.gdf.Wname.options[i].value];
return true;
break;
}
  }
if (document.gdf.Wname.options[i].selected != true) {
      alert("Bitte Name des Wettbewerbs eingeben!");
    document.gdf.Wname.focus();
    return false;
}
window[document.gdf.Wname.options[i].value] = new Array();

		}
~~~html
      <select name="Wname" size="5"  onchange="WennWname ()">  
				        <option>Quadrilon</option>  
				        <option>Skilager</option>  
				      </select>  
				       &nbsp;&nbsp;Andere Name:&nbsp;<input type="text" name="neu">&nbsp;  
				       <input type="button" value="Hinzu" onclick="WnameHinz()">  
		              </td>  
		            </tr>		  
		            <tr>  
		              <td></td><td></td>  
		            </tr>  
		          </table>  
				<p align="right"><input type="submit" name="Absenden" value="Absenden" onclick="return Absende();"></p>

LG Jake

  1. 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:(
    1. Danke für die Antwort!
      Eigentlich habe ich mich an diesem Beispiel orientiert: http://de.selfhtml.org/javascript/objekte/options.htm#value
      Eine Option muss aber ausgewählt sein, darum soll man zum auswählen aufgefordert werden wenn nichts ausgewählt ist.

      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.

      Das ganze soll ein Urkundengenerator werden: Mit der Auswahl soll der Name des Wettbewerbs eingelesen, und der Name soll dann als Array für die Daten des jeweiligen Wettbewerbs genommen werden... Oder geht das besser?

      LG Jakob

      1. Das funktionirt immer noch nicht:

        function Absend () {  
        			for (i = 0; i < document.gdf.Wname.length; ++i) {  
                            	if (document.gdf.Wname.options[i].selected)  
                              		alert(document.gdf.Wname.options[document.gdf.Wname.selectedIndex].text);  
        				//return true;	  
        	  		}  
        			for (i = 0; i < document.gdf.Wname.length; ++i) {  
                            	if (!document.gdf.Wname.options[i].selected)  
                              		alert("Bitte Namen des Wettbewerbs eingeben!");  
            				document.Formular.User.focus();  
            				//return false;	//ohne "//" geht nicht  
        	  		}  
        			  
        		}
        
        <form name="gdf" action=""  onsubmit="return Absend();">  
        		<fieldset>  
                         <legend>Grunddaten</legend>  
          
        		          <table border="0">  
        		  
        		            <tr>  
        		              <td>Name des Wettbewerbs:&nbsp;</td>  
        		              <td>  
        				      <select name="Wname" size="5">  
        				        <option>Quadrilon</option>  
        				        <option>Skilager</option>  
        				      </select>  
        				  
        		              </td>  
        		            </tr>		    		  
        		          </table>  
        				<p align="right"><input type="submit" name="Absenden" value="Absenden"></p>  
        		</fieldset>
        

        Wie schon gesagt: man soll bei keiner Auswahl zum auswählen aufgefordert werden und das Formular soll nicht abgeschickt werden.

        Wenn ich aber die 2. Option auswähle kommt die Meldung: "Bitte Namen des Wettbewerbs eingeben!"? Und wenn ich das return auskommentiere funktioniert das ganze nicht...

        LG Jake

        1. Irgendwie habe ich das Gefühl das die for- Schleifen zu gleich ausgeführt werden?

          Habe ich irgendwas falsch gemacht, das mir keiner helfen will/ kann?

          LG Jakob

          1. Om nah hoo pez nyeetz, Jake!

            Möglicherweise ist dieser Artikel etwas für dich.

            Matthias

            --
            1/z ist kein Blatt Papier.