Javascript Select umdrehen
Jens Hölzer
- javascript
0 Tabellenkalk0 Der Martin0 MudGuard
2 encoder
Hallo,
wir haben ein Select der zur Geburtstagsjahrauswahl dient. Hierbei nutze ich JS um das Formular aus zu füllen. Das Problem wir fangen bei 1916 an und haben bemerkt das wir doch mehr jüngere Nutzer haben als ältere. Jetzt möchte ich das Script gerene umdrehen so das nicht mehr 1916 als erstes kommt sondern 2016.
<select type="text" class="form-control" id="jahr" name="jahr" required>
<script>
var myDate = new Date();
var year = myDate.getFullYear();
var yearstop = year-100;
for(var i = yearstop; i < year+1; i++){
document.write(\'<option value="\'+i+\'">\'+i+\'</option>\');
}
</script>
</select>
Mein Ansatz war einfach die FOR bedingung zu ändern in
for(var i = year+1; i < yearstop; i--){
Leider lädt der Browser dann ewig. Ich muss also einen Logikfehler haben. Vielleicht könnt Ihr mir da helfen. Ich sage doch eigentlich i(2017) soll soweit kleiner gerechnet werden bis es Yearstop erreicht.
Wo liegt denn jetzt der Denkfehler?
Hallo,
Wo liegt denn jetzt der Denkfehler?
hat die Schleifenbedingung denn die Chance, wahr zu sein?
Gruß
Kalk
Hi,
Mein Ansatz war einfach die FOR bedingung zu ändern in
for(var i = year+1; i < yearstop; i--){
Leider lädt der Browser dann ewig.
ja, bei den Startbedingungen ist das eine Endlosschleife.
Ich sage doch eigentlich i(2017) soll soweit kleiner gerechnet werden bis es Yearstop erreicht.
Nein. Du sagst: Die Schleife soll mit immer kleiner werdendem i so lange laufen, wie i immer noch kleiner ist als yearstop. Wenn du also schon Start- und Endwert umkehrst und abwärts statt aufwärts zählst, musst du auch die Stopp-Bedingung umkehren.
Wo liegt denn jetzt der Denkfehler?
"Verdammt, schon dreimal abgesägt und immer noch zu kurz."
So long,
Martin
Hi,
ja, bei den Startbedingungen ist das eine Endlosschleife.
Wirklich? Ich kopier das mal zusammen und setze Kommentare für die Werte
var myDate = new Date(); //myDate ==> 22.01.2016
var year = myDate.getFullYear(); //year ==> 2016
var yearstop = year-100; //yearstop ==> 1916
for(var i = year+1; //i ==> 2017
i < yearstop; //2017 < 1916 ==> false
i--){
Die Schleife wird m.E. nie betreten.
cu,
Andreas a/k/a MudGuard
Hallo,
ja, bei den Startbedingungen ist das eine Endlosschleife.
Wirklich? Ich kopier das mal zusammen und setze Kommentare für die Werte
var myDate = new Date(); //myDate ==> 22.01.2016 var year = myDate.getFullYear(); //year ==> 2016 var yearstop = year-100; //yearstop ==> 1916 for(var i = year+1; //i ==> 2017 i < yearstop; //2017 < 1916 ==> false i--){
wenn du das so darstellst ... yo, das überzeugt. Punkt für dich.
Ich hatte die Initialisierung von yearstop allerdings als year+100 gelesen - was im Nachhinein betrachtet Blödsinn wäre, denn dann ergäben sich ja 2017 bis 2116 als Geburtsjahre zur Auswahl.
Die Schleife wird m.E. nie betreten.
Dann passt aber der gezeigte Code nicht mit dem beschriebenen Verhalten zusammen.
So long,
Martin
Hallo,
Dann passt aber der gezeigte Code nicht mit dem beschriebenen Verhalten zusammen.
Vielleicht meinte Jens mit "Der Browser lädt ewig" eigentlich "ich warte und warte, aber der Browser zeigt das select nicht an"...
Gruß
Kalk
Problem scheint ja gelöst, lasst mich mal fragen ob ein Eingabefeld mit 100 Zahlen wirklich sinnvoll ist? Ich find sowas immer unheimlich sinnfrei. Warum nicht ein paar Ziffern eintippen lassen und die Eingabe prüfen, sondern stattdessen eine ewige Scrollerei anbieten?
Erinnert mich an Datum/Zeit Eingabefelder auf dem Smartphone. Statt mich einfach 1530 für 15.30 Uhr tippen zu lassen muss ich ein zwar cooles aber end-nerviges Scrollrad bemühen.
Hallo encoder,
Erinnert mich an Datum/Zeit Eingabefelder auf dem Smartphone. Statt mich einfach 1530 für 15.30 Uhr tippen zu lassen muss ich ein zwar cooles aber end-nerviges Scrollrad bemühen.
Ich würde sagen, du kannst ein zwar cooles aber end-nerviges Scrollrad bemühen. Du könntest aber auch auf die Zahl tappen und dann den gewünschten Wert eingeben. Wahrscheinlich allerdings getrennt für 15 und 30.
Bis demnächst
Matthias