Jens Hölzer: Javascript Select umdrehen

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?

  1. Hallo,

    Wo liegt denn jetzt der Denkfehler?

    hat die Schleifenbedingung denn die Chance, wahr zu sein?

    Gruß
    Kalk

  2. 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

    1. 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

      1. 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

        1. 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

  3. 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.

    1. 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

      --
      Das Geheimnis des Könnens liegt im Wollen. (Giuseppe Mazzini)