document.write и JS Календарь

 
0
 
JavaScript
ava
EXTR PROGRAMMER | 18.12.2004, 19:32
Препод дал задание: написать календарь на JavaScript.
Навороты: изменение месяца и года. Все получилось, кроме изменений.
Да и еще document.write не дает возможность сделать форматирование
К примеру, если я к приведенному ниже исходнику допишу в теге <body> style="background-color: red;", то он все равно не будет "red". Плиз, помогите советами: почему document.write производит перекрытие и как с этим бороться. И еще: как тут можно доделать изменеия месяца и года. Сэнкс!


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Календарь</title>
<script type="text/javascript">
var year_month=new Array("Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь");
var days_of_week=new Array("ПН", "ВТ", "СР", "ЧТ", "ПТ", "СБ", "ВСК");
var month=null;
var year=null;

function calendar(month, year)
{
var now=new Date();
if(year!=null)
now.setFullYear(year);
if(month!=null)
now.setMonth(month);
var current_year=now.getFullYear();
var current_day=now.getDate();
now.setDate(1);
var day_of_week=now.getDay();
if(day_of_week==0)
day_of_week=7;
var current_month=now.getMonth();
var end_of_month=28;
while(current_month==now.getMonth())
now.setDate(++end_of_month);
--end_of_month;

//Вычисляем последний день предыдущего месяца
var last=now;
last.setMonth(current_month-1);
var last_month=last.getMonth();
var end_of_last_month=28;
while(last_month==last.getMonth())
last.setDate(++end_of_last_month);
--end_of_last_month;
//Завершае вычисления. Начинаем рисовать
document.write("<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\" align=\"center\"><tr style=\"text-align: left; \"><td colspan=\"2\">);
document.write("<select id=\"month_select\">);
var i;
for(i=0; i<year_month.length; i++)
{
document.write("<option id=\""+i+"\">"+year_month[i]+"<\/option>");
}
document.write("<\/select>");
document.write("<\/td>");
document.write("<td colspan=\"3\" align=\"center\"><input type=\"text\" size=\"4\" maxlength=\"4\" value=\""+current_year+"\" \/></td>");
document.write("<td colspan=\"2\" align=\"center\"><input type=\"button\" value=\"Year!\" onClick=\"calendar(2,2004);\" \/><\/td><\/tr><\/table>");
document.write("<br \/><table align=\"center\" cellspacing=\"0\" cellpadding=\"5\" border=\"0\" style=\"text-align: center; border: double 1px white;\">");
document.write("<tr style=\"background-color: #cccccc\">");
for(i=0; i<days_of_week.length; i++)
{
if(i<5)
document.write("<td>"+days_of_week[i]+"<\/td>");
else
document.write("<td style=\"color: red;\">"+days_of_week[i]+"<\/td>");
}
document.write("<\/tr>");
for(i=2-day_of_week; i<=43-day_of_week; i++)
{
if((i-1+day_of_week)%7==1)
document.write("<tr>");
if(i<1)
{
document.write("<td><span style=\"font-size: 1em; color: #cccccc;\">"+(i+end_of_last_month)+"<\/span><\/td>");
}
else
{
if(i==current_day)
document.write("<td><span style=\"font-size: 1em; font-weight: bold; color: red;\">"+i+"<\/span><\/td>");
else
{
if(i>end_of_month)
document.write("<td><span style=\"font-size: 1em; color: #cccccc;\">"+(i-end_of_month)+"<\/span><\/td>");
else
document.write("<td><span style=\"font-size: 1em;\">"+i+"<\/span><\/td>");
}
}
if((i-1+day_of_week)%7==0)
document.write("</tr>");
}
document.write("<\/table>");
}
</script>
</head>
<body onLoad="calendar(0,0);">
</body>
</html>

später ergänzt:
И еще, может вы заметили, что я пытался в середине функции вызвать эту же функцию еще раз, но ничего не получилось.... подскажите, плиз...
Kommentare (1)
ava
Sardar | 19.12.2004, 03:28 #
Замени все вызовы document.write на buffer+=, где буффер это строка в которой накапливаем разметку. В конце через document.body.innerHTML=buffer; ты вставляешь всё что тебе нужно в тело страницы. Можно создать слой, что будет умнее и вставлять в него свой календарь, таким образом сможешь иметь что либо еще на странице, кроме календаря.
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
advanced
Absenden