19.12.2012, 17:35
|
Новичок на форуме
|
|
Регистрация: 19.12.2012
Сообщений: 2
|
|
Помогите разобраться с механизмом вызова функции
Здравствуйте, недавно начал осваивать JS/CSS. Хочу сделать небольшой учебный проект.
Функция рисует таблицу на основе заданного значения переменной. Ячейки таблицы отображаются с использованием классов стилей. При загрузке страницы вызывается данная функция, рисует все так как и задумано. При нажатии на кнопку изменяется значение переменной, и снова запускает функцию, она рисует таблицу но уже без стилей, хотя функция классы стилей присваивает правильно.(стили описаны в заголовке) При следующем нажатии на кнопку функция не работает, в консоль выводится ошибка: переменная на описана. (переменная описана с том же теге JS, перед функцией.
Подскажите, в каком направлении искать ошибку?
Заранее спасибо.
|
|
19.12.2012, 17:56
|
|
Профессор
|
|
Регистрация: 30.04.2012
Сообщений: 3,018
|
|
Исходник пожалуйста.
|
|
19.12.2012, 18:07
|
Новичок на форуме
|
|
Регистрация: 19.12.2012
Сообщений: 2
|
|
Календарь на текущий месяц. Проблемная функция reload, переменная m
<html>
<head>
<style>
td
{
text-align:center;
}
td.bc
{
color:red;
}
td.hc
{
color:green;
}
td.pc
{
font-weight:bold;
color:red;
}
td.cc
{
background:yellow;
}
</style>
</head>
<body>
<script type = "text/javascript">
Month = new Array ('Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь');
wek = new Array ('пн','вт','ср','чт','пт','сб','вс');
mon = new Array (31,28,31,30,31,30,31,31,30,31,30,31);
hol = new Array (1,23,8,0,9,12,0,0,0,0,4,12);
now = new Date();
d = now.getDate();
m = now.getMonth();
y = now.getFullYear();
y0 = 2000; m0 = 0; d0 = 1; dw0 = 6;
k=1; s=0; dw=1;
for (i = y0; i<y; i++)
{
if (i%4==0)
{
s=s+366;
}
else
{
s+=365;
}
}
if (y%4==0)
{
mon [1]=29;
}
else
{
mon [1]=28;
}
for (j=m0; j<m; j++)
{
s=s+mon[j];
}
dw =(s+d+1)%7;
if (dw==0)
{
dw=7;
}
function Reload()
{
window.document.write ('<input type="button" value="<<" onclick="m--;Reload();"/>');
window.document.write ('<table width = "400px" height = "250px">');
for ( i=0; i<7;i++)
{
window.document.write ('<tr>');
for ( j=0; j<7; j++)
{
cellstyle = 'bc';
if (j<=5)
{
cellstyle = 'vc';
}
if (k==hol[m])
{
cellstyle = 'pc';
}
if (i==0)
{
cellvalue = wek[j];
cellstyle = 'hc';
}
if(i==1)
{
if ((j+1)>=dw)
{
cellvalue = k;
k++;
}
else
{
cellvalue = ' ';
}
}
if(i>1)
{
if(k<=mon[m])
{
cellvalue = k;
if (d==cellvalue)
{
cellstyle = 'cc';
}
}
else
{
cellvalue = ' ';
}
k++;
}
window.document.write('<td class = "'+cellstyle+'">'+cellvalue+'</td>');
}
window.document.write ('</tr>');
}
window.document.write ('</table> ');
k=1;
}
Reload ();
</script>
</body>
</html>
|
|
20.12.2012, 09:07
|
|
Профессор
|
|
Регистрация: 25.08.2011
Сообщений: 420
|
|
проблема была в window.document.write вот так работает
<html>
<head>
<style>
td
{
text-align:center;
}
td.bc
{
color:red;
}
td.hc
{
color:green;
}
td.pc
{
font-weight:bold;
color:red;
}
td.cc
{
background:yellow;
}
</style>
</head>
<body>
<div id="kalendar"></div>
<script type = "text/javascript">
Month = new Array ('Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь');
wek = new Array ('пн','вт','ср','чт','пт','сб','вс');
mon = new Array (31,28,31,30,31,30,31,31,30,31,30,31);
hol = new Array (1,23,8,0,9,12,0,0,0,0,4,12);
now = new Date();
d = now.getDate();
m = now.getMonth();
y = now.getFullYear();
y0 = 2000; m0 = 0; d0 = 1; dw0 = 6;
k=1; s=0; dw=1;
for (i = y0; i<y; i++)
{
if (i%4==0)
{
s=s+366;
}
else
{
s+=365;
}
}
if (y%4==0)
{
mon [1]=29;
}
else
{
mon [1]=28;
}
for (j=m0; j<m; j++)
{
s=s+mon[j];
}
dw =(s+d+1)%7;
if (dw==0)
{
dw=7;
}
function Reload()
{
m--;
kalendar_div = document.getElementById('kalendar');
html = '<input type="button" value="<<" onclick="return Reload();"/>';
html += '<table width = "400px" height = "250px">';
for ( i=0; i<7;i++)
{
html +='<tr>';
for ( j=0; j<7; j++)
{
cellstyle = 'bc';
if (j<=5)
{
cellstyle = 'vc';
}
if (k==hol[m])
{
cellstyle = 'pc';
}
if (i==0)
{
cellvalue = wek[j];
cellstyle = 'hc';
}
if(i==1)
{
if ((j+1)>=dw)
{
cellvalue = k;
k++;
}
else
{
cellvalue = ' ';
}
}
if(i>1)
{
if(k<=mon[m])
{
cellvalue = k;
if (d==cellvalue)
{
cellstyle = 'cc';
}
}
else
{
cellvalue = ' ';
}
k++;
}
html += '<td class = "'+cellstyle+'">'+cellvalue+'</td>';
}
html +='</tr>';
}
html +='</table>';
k=1;
kalendar_div.innerHTML = html;
return false;
}
Reload ();
</script>
</body>
</html>
|
|
|
|