Во-первых, вы странно вычисляете возраст.
Сделайте это:
var today = new Date();
var bday = new Date(d[2],d[1],d[0]);
var age = today.getFullYear() - bday.getFullYear(); //If you're born in 1980 then 2011-1980 means you're about 31 years old, this will give you the age if birthday has already passed
if(today.getMonth() < bday.getMonth() || (today.getMonth() == bday.getMonth() && today.getDate() < bday.getDate()))
{
age--; //Reduce age by 1 if birthday hasn't passed
}
Что касается гигантской структуры elseif, то сначала я бы разбил ее на две отдельные структуры.Это позволяет вам использовать диапазоны в одном, которые недоступны в другом, чтобы сократить общую структуру.Возрастные диапазоны настолько перемешаны в нем, что я не очень-то стараюсь выбирать соответствующие структуры.Возможно, вы захотите использовать операторы switch case вместо if / elseif / else.
Кроме того, поместите ваши функции в голову там, где они принадлежат.Кроме того, вам нужна некоторая проверка ошибок в функции ShowAge () на случай, если это недопустимая дата.Кроме того, вам нужно использовать getElementById
в идентификаторе формы, чтобы изменить его значение в ShowAge()
в конце, в противном случае он не знает, что такое form
.Итак, дайте вашей форме идентификатор и измените конец ShowAge()
на:
document.getElementById('formid').age.value = age;