2017-12-31 125 views
0

Ich habe ein Eingabefeld für das Geburtsdatum auf meinem Formular. Es gibt ein HTML-Auswahlfeld, das Javascript verwendet, um eine Liste von Jahren von 1930 bis 2017 zu präsentieren.Wählen Sie das Eingangsjahr in absteigender Reihenfolge

Wenn Sie jedoch auswählen, erscheint 1930 an der Spitze. Im Idealfall muss 2017 an der Spitze sein.

Ich bin sicher, das ist eine einfache Lösung, aber ich kann nicht sehen, wo ich falsch gelaufen bin.

Vielen Dank für die Hilfe.

var Days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // index => month [0-11] 
 
$(document).ready(function() { 
 
    var option = '<option value="day">DD</option>'; 
 
    var selectedDay = "day"; 
 
    for (var i = 1; i <= Days[0]; i++) { //add option days 
 

 
    if (i < 10) { 
 

 
     option += '<option value="0' + i + '">0' + i + '</option>'; 
 

 
    } else { 
 

 
     option += '<option value="' + i + '">' + i + '</option>'; 
 

 
    } 
 

 
    } 
 
    $('#day').append(option); 
 
    $('#day').val(selectedDay); 
 

 
    var option = '<option value="month">MM</option>'; 
 
    var selectedMon = "month"; 
 
    for (var i = 1; i <= 12; i++) { 
 

 
    if (i < 10) { 
 

 
     option += '<option value="0' + i + '">0' + i + '</option>'; 
 

 
    } else { 
 

 
     option += '<option value="' + i + '">' + i + '</option>'; 
 

 
    } 
 

 
    } 
 
    $('#month').append(option); 
 
    $('#month').val(selectedMon); 
 

 
    var d = new Date(); 
 
    var option = '<option value="year">YYYY</option>'; 
 
    selectedYear = "year"; 
 
    for (var i = 1930; i <= d.getFullYear(); i++) { // years start i 
 
    option += '<option value="' + i + '">' + i + '</option>'; 
 
    } 
 
    $('#year').append(option); 
 
    $('#year').val(selectedYear); 
 
}); 
 

 
function isLeapYear(year) { 
 
    year = parseInt(year); 
 
    if (year % 4 != 0) { 
 
    return false; 
 
    } else if (year % 400 == 0) { 
 
    return true; 
 
    } else if (year % 100 == 0) { 
 
    return false; 
 
    } else { 
 
    return true; 
 
    } 
 
} 
 

 
function change_year(select) { 
 
    if (isLeapYear($(select).val())) { 
 
    Days[1] = 29; 
 
    if ($("#month").val() == 2) { 
 
     var day = $('#day'); 
 
     var val = $(day).val(); 
 
     $(day).empty(); 
 
     var option = '<option value="day">DD</option>'; 
 
     for (var i = 1; i <= Days[1]; i++) { //add option days 
 
     option += '<option value="' + i + '">' + i + '</option>'; 
 
     } 
 
     $(day).append(option); 
 
     if (val > Days[month]) { 
 
     val = 1; 
 
     } 
 
     $(day).val(val); 
 
    } 
 
    } else { 
 
    Days[1] = 28; 
 
    } 
 
} 
 

 
function change_month(select) { 
 
    var day = $('#day'); 
 
    var val = $(day).val(); 
 
    $(day).empty(); 
 
    var option = '<option value="day">DD</option>'; 
 
    var month = parseInt($(select).val()) - 1; 
 
    for (var i = 1; i <= Days[month]; i++) { //add option days 
 
    option += '<option value="' + i + '">' + i + '</option>'; 
 
    } 
 
    $(day).append(option); 
 
    if (val > Days[month]) { 
 
    val = 1; 
 
    } 
 
    $(day).val(val); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
 

 
<label>Date of birth (DD-MM-YYYY)</label> 
 
<select id="day" name="day"></select> 
 
<select id="month" name="month"></select> 
 
<select id="year" name="year"></select>

Antwort

2

Statt für die Schleife, verwenden Sie diese Syntax, um die Reihenfolge

for (var i = d.getFullYear(); i >= 1930; i--) { // years start i 

Die anfängliche Zuordnung ist die höchste Jahr zu umkehren, stoppt es, wenn ich < 1930 und die - - bedeutet, es geht in die Schleife anstatt nach oben.

+0

Funktioniert perfekt! Vielen Dank –

Verwandte Themen