Это то, что я придумал.Я надеюсь, что это имеет смысл.Некоторые изменения были косметическими.Основное изменение состоит в том, что вместо select.options...
я заменил select
на year
, month
и day
для их соответствующих строк.См. Фрагмент ниже.
var calculate_age = function(date_start){
var date_end = new Date(), date_end_time = date_end.getTime();
var date_start_time = date_start.getTime();
var diff = (date_end_time - date_start_time)/(1000*60*60*24);
return Math.floor(diff/365+1);
};
function calage() {
console.log('in calage')
var year = document.getElementById("year" );
var x = year.options[year.selectedIndex].value;
var month = document.getElementById("month" );
var y = month.options[month.selectedIndex].value;
var day = document.getElementById("day" );
var z = day.options[day.selectedIndex].value;
if (x !== 'empty' && y !== 'empty' && z !== 'empty') {
console.log('x: ', x);
console.log('y: ', y);
console.log('z: ', z);
document.getElementById('age').value=(calculate_age(new Date(x, y, z)));
}
}
$(document).ready(calage);
Другое существенное изменение заключается в том, что значение для месяцев необходимо заменить на числа вместо коротких имен.Итак, 0, 1, 2...
вместо jan, feb, mar
, потому что конструктор new Date()
ожидает числа.
Итак, чтобы подвести итог, как уже упоминалось выше David Thomas
, вы неоднократно использовали необъявленную переменную select
для каждого иззначения, установленные компонентами select
.Вы даже не использовали значения, которые вы устанавливали в year
, month
и day
. Вот кодовая ручка для рабочего примера.