Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите разобраться с механизмом вызова функции (https://javascript.ru/forum/misc/34075-pomogite-razobratsya-s-mekhanizmom-vyzova-funkcii.html)

Mantorrash 19.12.2012 17:35

Помогите разобраться с механизмом вызова функции
 
Здравствуйте, недавно начал осваивать JS/CSS. Хочу сделать небольшой учебный проект.
Функция рисует таблицу на основе заданного значения переменной. Ячейки таблицы отображаются с использованием классов стилей. При загрузке страницы вызывается данная функция, рисует все так как и задумано. При нажатии на кнопку изменяется значение переменной, и снова запускает функцию, она рисует таблицу но уже без стилей, хотя функция классы стилей присваивает правильно.(стили описаны в заголовке) При следующем нажатии на кнопку функция не работает, в консоль выводится ошибка: переменная на описана. (переменная описана с том же теге JS, перед функцией.
Подскажите, в каком направлении искать ошибку?

Заранее спасибо.

ruslan_mart 19.12.2012 17:56

Исходник пожалуйста.

Mantorrash 19.12.2012 18:07

Календарь на текущий месяц. Проблемная функция 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 = '&nbsp;';
							}
						}
						if(i>1)
						{
							if(k<=mon[m])
							{
								cellvalue = k;
								if (d==cellvalue)
								{
									cellstyle = 'cc';
								}
							}
							else 
							{
								cellvalue = '&nbsp;';
							}
							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

проблема была в 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 = '&nbsp;';
							}
						}
						if(i>1)
						{
							if(k<=mon[m])
							{
								cellvalue = k;
								if (d==cellvalue)
								{
									cellstyle = 'cc';
								}
							}
							else 
							{
								cellvalue = '&nbsp;';
							}
							k++;
						}
						html += '<td class = "'+cellstyle+'">'+cellvalue+'</td>';
					}
					html +='</tr>';
				}
				html +='</table>';
				k=1;
				kalendar_div.innerHTML = html;
				return false;
			}
			Reload ();
		</script>

	</body> 
</html>


Часовой пояс GMT +3, время: 05:36.