Der Martin: Kleinster Value von select (multiple) finden

Beitrag lesen

Hallo,

in einer Auswahlliste (select multiple) sind mehrere Werte markiert.
Ich möchte jetzt gerne bei einem Click herausfinden welches der kleinste markierte Value ist

du meinst, zahlenmäßig der kleinste? - Das ergibt sich aus deinem Codeauszug, ist aber nicht selbstverständlich, weil die values ja nicht unbedingt Zahlenwerte sein müssen.

Ich habe es vermutlich sehr umständlich so versucht:

Allerdings. ;-)

var spvalues_arr = new Array();
if(spdefault1 == false){
for(i=0;i<selelm.length;i++){

Ich nehme an, selelm ist eine Referenz auf das select-Element? Dann überlege mal, ob das select-Elementobjekt selbst überhaupt eine length-Eigenschaft hat. Du meintest die Anzahl der options?
Ergo: Die for-Schleife wird überhaupt nicht bearbeitet!

  	if(selelm.options[i].selected==true  ){  

Warum nochmal explizit auf true vergleichen? if (selelm.options[i].selected) ist einfacher und verständlicher.

  		spvalues\_arr[i] = selelm.options[i].value;  
  	}  
  }  

}
var mini = spvalues_arr;

Damit weist du mini ein Array zu. Ist das deine Absicht?

for(i=0;i<selelm.length;i++){
mini = Math.min(selelm.options[i].value,mini);
}

Und dann versuchst du mit Math.min quasi ein Array mit einem Zahlenwert zu vergleichen. Der indirekte Hinweis auf parseInt() war zwar von der Didaktik her gut, aber nicht notwendig. Javascript konvertiert Strings automatisch in Zahlenwerte, wenn der Kontext zwingend einen Zahlenwert verlangt.
Dein Problem ist aber, dass das Array mini im ersten Schleifendurchlauf nicht in einen Zahlenwert konvertiert werden kann, Math.min() deshalb NaN zurückgibt. In allen weiteren Schleifendurchläufen ist eines der beiden Argumente von Math.min() wieder NaN, das Ergebnis mithin wiederum NaN.

was mache ich falsch, bzw. gibt es vielleicht eine elegantere Lösung?

Die option-Werte gibst du doch vor. Also weißt du auch mit Sicherheit, welcher Wert auf keinen Fall übeschritten werden kann. Initialisiere deshalb den min-Wert mit einem sehr großen Wert, der in deinen Daten nicht vorkommt.
Dann läufst du *nur einmal* durch die option-Elemente und vergleichst in jedem Durchlauf das bisher ermittelte Minimum mit dem aktuellen Eintrag (Math.min ist da sicher kein falscher Ansatz), sofern er selektiert ist.
Ist am Schleifenende der min-Wert immer noch größer als der größte erlaubte Wert, waren keine Einträge selektiert - hast du den Fall eigentlich bisher berücksichtigt?

So long,
 Martin

--
"Hier steht, deutsche Wissenschaftler hätten es im Experiment geschafft, die Lichtgeschwindigkeit auf wenige Zentimeter pro Sekunde zu verringern." - "Toll. Steht da auch, wie sie es gemacht haben?" - "Sie haben den Lichtstrahl durch eine Behörde geleitet."