календарь на JavaScript
Начал заниматься JavaScript по книге Вадима Дунаева. И вот какая фишка у меня получилась. Решил я списать скрипт календаря. Переписал, запустил, а он не работает. Разметка хтмл показывает все как надо, а вот скрипт не хочет пахать, не че не кажет.
Код:
<html>
<head>
<title>Каленадрь</title>
</head>
<script language="JavaScript">
var nowdate
function setToday() { //установка текущей даты
var now =new Date();
var day =now.getDate();
var month =now.getMonth();
var year =now.getYear();
var anameday=new Array("Воскресенье", "Понедельник", "Вторник",
"Среда", "Четверг", "Пятница", "Суббота")
var nameday=anameday[now.getDay()] //название дня недели
if(year < 2000)
year=year + 1900;
this.focusDay=day;
document.calControl.month.selectedIndex=month;
document.calControl.year.value=year;
displayCalendar(month, year);
nowdate=day+"." + parseInt(month+1) + "." + year;
document.all.PrevYear2.value=nowdate + " " + nameday;
}
function isFourDigitYear(year) {
if(year.length !=4) {
alert("Год должен содержать 4 цифры");
document.calControl.year.select();
document.calControl.year.focus();
} else { return true; }
}
function selectDate() {
var year =document.calControl.year.value;
if (isFourDigitYear(year)) {
var day =0;
var month=document.calControl.month.selectedIndex;
displayCalendar(month, year)
}
}
function setPrevYear() { //предыдущий год
var year =document.calControl.year.value;
if (isFourDigitYear(year)){
var day =0;
var month=document.calControl.month.selectedIndex;
year--;
document.calControl.year.value = year;
displayCalendar(month, year);
}
}
function setPrevMonth() { //предыдущий месяц
var year =document.calControl.year.value;
if (isFourDigitYear(year)) {
var day =0;
var month=document.calControl.month.selectedIndex;
if (month == 0) {
month=11;
if (year>1000){
year--;
document.calControl.year.value=year;
}
}else{ month-- }
document.calControl.month.selectedIndex=month;
displayCalendar(month, year);
}
}
function setNextMonth() { //следующий месяц
var year =document.calControl.year.value;
if (isFourDigitYear(year)){
var day =0;
var month=document.calControl.month.selectedIndex;
if(month == 11) {
month=0;
year++;
document.calControl.year.value=year;
}else{ month++ }
document.calControl.month.selectedIndex=month;
displayCalendar(month, year);
}
}
function setNextYear() { //следующий год
var year =document.calControl.year.value;
if (isFourDigitYear(year)){
var day =0;
var month=document.calControl.month.selectedIndex;
year++;
document.calControl.year.value=year;
displayCalendar(month, day);
}
}
function displayCalendar(month, year){ //показать календарь
month=parseInt(month);
year=parseInt(year);
var i=0;
var days=getDaysInMonth(month+1, year);
var firstOfMonth=new Date(year, month, 1)
var startingPos=firstOfMonth.getDay()-1;
if(startingPos<0) startingPos=6
days +=staringPos;
document.calButtons.calPage.value = "Пн Вт Ср Чт Пт Сб Вс";
document.calButtons.calPage.value +="\n _________________";
for(i=0; i<startingPos; i++){
if(i%7==0) document.calButtons.calPage.value +="\n";
document.calButtons.calPage.value +=" ";
}
for(i=startingPos; i < days; i++){
if (i%7==0)document.calButtons.calPage.value +="\n";
if(i-startingPos+1 < 10)
document.calButtons.calPage.value += "0";
document.calButtons.calPage.value +="i-startingPos+1";
document.calButtons.calPage.value += " ";
}
for(i=days; i<42; i++){
if(i%7==0)document.calButtons.calPage.value += "\n";
document.calButtons.calPage.value +=" ";
}
document.calControl.Go.focus()
}
function getDaysInMonth(month, year){ //получить день в месяце
var days
if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)days=31;
else if(month==4 || month==6 || month==9 || month==11)days=30;
else if(month==2){
if(visYear(year)) {days=29;} //если год високосный
else{days=28;}
}
return(days);
}
function visYear(Year){ //високосные года
if (((Year % 4)==0)&&((Year % 100)!=0) || ((Year % 400))==0)){
return(true);
}else{return(false);}
}
</script>
<form name="calControl" onSubmit="return false">
<table cellpadding=0 cellspacing=0 border=0>
<tr><td colspan=7>
<center>
<select name="month" onchange="selectDate()">
<option>Январь
<option>Ферваль
<option>Март
<option>Апрель
<option>Май
<option>Июнь
<option>Июль
<option>Август
<option>Сентябрь
<option>Октябрь
<option>Ноябрь
<option>Декабрь
</select>
<input name="year" type="text" size=4 maxlength=4 onchange="selectDate()">
<input type="button" name="Go" value=" OK " onclick="selectDate()" title="Если изменили год, щелкните здесь">
</td>
</tr>
</form>
<form name="calButtons">
<tr><td align="center">
<textarea font="Courier" name="calPage" wrap="no" rows=8 cols=24>
</textarea>
</td>
<tr><td>
<center>
<input type="button" name="PrevYear" value="<<"
style="font-size:9"
onclick="setPrevYear()"
title="Год -">
<input type="button" name="PrevYear" value="<"
style="font-size:9"
onclick="setPrevMonth()"
title="Месяц -">
<input type="button" name="PrevYear2" value=""
style="font-size:9"
onclick="setToday()"
title="Календарь на текущую дату">
<input type="button" name="PrevYear" value=" >"
style="font-size:9"
onclick="setNextMonth()"
title="Месяц +">
<input type="button" name="PrevYear" value=">>"
style="font-size:9"
onclick="setNexrYear()"
title="Год +">
</center></td></tr></table></form>
<!--Запускаем функцию setToday-->
<script>setToday()</script>
</html>
<head>
<title>Каленадрь</title>
</head>
<script language="JavaScript">
var nowdate
function setToday() { //установка текущей даты
var now =new Date();
var day =now.getDate();
var month =now.getMonth();
var year =now.getYear();
var anameday=new Array("Воскресенье", "Понедельник", "Вторник",
"Среда", "Четверг", "Пятница", "Суббота")
var nameday=anameday[now.getDay()] //название дня недели
if(year < 2000)
year=year + 1900;
this.focusDay=day;
document.calControl.month.selectedIndex=month;
document.calControl.year.value=year;
displayCalendar(month, year);
nowdate=day+"." + parseInt(month+1) + "." + year;
document.all.PrevYear2.value=nowdate + " " + nameday;
}
function isFourDigitYear(year) {
if(year.length !=4) {
alert("Год должен содержать 4 цифры");
document.calControl.year.select();
document.calControl.year.focus();
} else { return true; }
}
function selectDate() {
var year =document.calControl.year.value;
if (isFourDigitYear(year)) {
var day =0;
var month=document.calControl.month.selectedIndex;
displayCalendar(month, year)
}
}
function setPrevYear() { //предыдущий год
var year =document.calControl.year.value;
if (isFourDigitYear(year)){
var day =0;
var month=document.calControl.month.selectedIndex;
year--;
document.calControl.year.value = year;
displayCalendar(month, year);
}
}
function setPrevMonth() { //предыдущий месяц
var year =document.calControl.year.value;
if (isFourDigitYear(year)) {
var day =0;
var month=document.calControl.month.selectedIndex;
if (month == 0) {
month=11;
if (year>1000){
year--;
document.calControl.year.value=year;
}
}else{ month-- }
document.calControl.month.selectedIndex=month;
displayCalendar(month, year);
}
}
function setNextMonth() { //следующий месяц
var year =document.calControl.year.value;
if (isFourDigitYear(year)){
var day =0;
var month=document.calControl.month.selectedIndex;
if(month == 11) {
month=0;
year++;
document.calControl.year.value=year;
}else{ month++ }
document.calControl.month.selectedIndex=month;
displayCalendar(month, year);
}
}
function setNextYear() { //следующий год
var year =document.calControl.year.value;
if (isFourDigitYear(year)){
var day =0;
var month=document.calControl.month.selectedIndex;
year++;
document.calControl.year.value=year;
displayCalendar(month, day);
}
}
function displayCalendar(month, year){ //показать календарь
month=parseInt(month);
year=parseInt(year);
var i=0;
var days=getDaysInMonth(month+1, year);
var firstOfMonth=new Date(year, month, 1)
var startingPos=firstOfMonth.getDay()-1;
if(startingPos<0) startingPos=6
days +=staringPos;
document.calButtons.calPage.value = "Пн Вт Ср Чт Пт Сб Вс";
document.calButtons.calPage.value +="\n _________________";
for(i=0; i<startingPos; i++){
if(i%7==0) document.calButtons.calPage.value +="\n";
document.calButtons.calPage.value +=" ";
}
for(i=startingPos; i < days; i++){
if (i%7==0)document.calButtons.calPage.value +="\n";
if(i-startingPos+1 < 10)
document.calButtons.calPage.value += "0";
document.calButtons.calPage.value +="i-startingPos+1";
document.calButtons.calPage.value += " ";
}
for(i=days; i<42; i++){
if(i%7==0)document.calButtons.calPage.value += "\n";
document.calButtons.calPage.value +=" ";
}
document.calControl.Go.focus()
}
function getDaysInMonth(month, year){ //получить день в месяце
var days
if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)days=31;
else if(month==4 || month==6 || month==9 || month==11)days=30;
else if(month==2){
if(visYear(year)) {days=29;} //если год високосный
else{days=28;}
}
return(days);
}
function visYear(Year){ //високосные года
if (((Year % 4)==0)&&((Year % 100)!=0) || ((Year % 400))==0)){
return(true);
}else{return(false);}
}
</script>
<form name="calControl" onSubmit="return false">
<table cellpadding=0 cellspacing=0 border=0>
<tr><td colspan=7>
<center>
<select name="month" onchange="selectDate()">
<option>Январь
<option>Ферваль
<option>Март
<option>Апрель
<option>Май
<option>Июнь
<option>Июль
<option>Август
<option>Сентябрь
<option>Октябрь
<option>Ноябрь
<option>Декабрь
</select>
<input name="year" type="text" size=4 maxlength=4 onchange="selectDate()">
<input type="button" name="Go" value=" OK " onclick="selectDate()" title="Если изменили год, щелкните здесь">
</td>
</tr>
</form>
<form name="calButtons">
<tr><td align="center">
<textarea font="Courier" name="calPage" wrap="no" rows=8 cols=24>
</textarea>
</td>
<tr><td>
<center>
<input type="button" name="PrevYear" value="<<"
style="font-size:9"
onclick="setPrevYear()"
title="Год -">
<input type="button" name="PrevYear" value="<"
style="font-size:9"
onclick="setPrevMonth()"
title="Месяц -">
<input type="button" name="PrevYear2" value=""
style="font-size:9"
onclick="setToday()"
title="Календарь на текущую дату">
<input type="button" name="PrevYear" value=" >"
style="font-size:9"
onclick="setNextMonth()"
title="Месяц +">
<input type="button" name="PrevYear" value=">>"
style="font-size:9"
onclick="setNexrYear()"
title="Год +">
</center></td></tr></table></form>
<!--Запускаем функцию setToday-->
<script>setToday()</script>
</html>
staringPos - ошибка в названии переменной
2)if (((Year % 4)==0)&&((Year % 100)!=0) || ((Year % 400))==0))
Здесь одна закрывающая скобка лишняя.
Советы на будущее:
1)Установите себе какой нибудь редактор с подсветкой синтаксиса JavaScript. Я пользуюсь FAR-овским Colorer.
2)В FireFox есть замечательная штука - консоль JavaScript. Она позволяет очень быстро находить ощибки в JS.
Удачи.
И спасибо за консоль в огненой лисе.
Но календарь почему то не работает. Сорри за тупизм, но я просто тока начинаю изучать яву. У меня вот что получилось в окне:[ATTACH]1659[/ATTACH]
Дебажте свой скрипт вставляя в ключевые места alert-ы. Вы же всю эту возню с календарем затеяли для того чтобы научиться? Вот и учитесь находить ошибки в коде.