[JS]JavaScript przestaje widzieć funkcję

0

Piszę w JavaScript prosty skrypt kalendarza, w którym funkcja rysuj(data) rysuje kalendarz dla miesiąca ze zmiennej data i działa to dobrze. Potem dodałem możliwość zmieniania wyświetlanego miesiąca. Napisałem odpowiednie funkcje - od() i dod(), gdzie ta pierwsza zmienia miesiąc o jeden do tyłu, a druga o 1 do przodu. W każdej z nich znajduje się wywołanie funkcji rysuj ze zmienioną datą jako argumentem. I tu dzieje się coś, czego nie rozumiem. Po uruchomieniu skryptu wszystko działa dobrze, gdy naciskam strzałkę w prawo, kalendarz zmienia się z maja na czerwiec. Ale kiedy naciskam strzałkę drugi raz, już nie działa, pojawia się błąd, że funkcja dod() nie jest zdefiniowana, mimo że przed chwilą jeszcze była. Nie mam pojęcia, co mam zrobić i będę wdzięczny za szybką pomoc.

0

Załącz kod.

0
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-2">
</head>
<body>
<script type="text/javascript">

var data1=new Date();
var e,f,g;

rysuj(data1);

function dod()
{

e=data1.getFullYear();
f=data1.getMonth();
g=data1.getDate();
data1=new Date(e,f+1,g);
rysuj(data1);
return;
}


function od()
{

e=data1.getFullYear();
f=data1.getMonth();
g=data1.getDate();
data1=new Date(e,f-1,g);
rysuj(data1);
return;
}

function rysuj(data)
{

var dni;
var mies;
var rok;
var ms;

var dni;

var i,j;
var k,l;
var x;

var a,b;

dn=data.getDate();
mies=data.getMonth();
rok=data.getFullYear();



switch (mies)
{
case 0:ms='Styczeń';break;
case 1:ms='Luty';break;
case 2:ms='Marzec';break;
case 3:ms='Kwiecień';break;
case 4:ms='Maj';break;
case 5:ms='Czerwiec';break;
case 6:ms='Lipiec';break;
case 7:ms='Sierpień';break;
case 8:ms='Wrzesień';break;
case 9:ms='Październik';break;
case 10:ms='Listopad';break;
case 11:ms='Grudzień';break;
default:break;
}

ms+=' '+rok;

document.write('<table cellspacing=0 cellpadding=2><tr bgcolor=red><td><a href="javascript:od()"><</a></td><td colspan=5 align=center>'+ms+'</td><td><a href="javascript:dod()">></a></td>');

document.write('</tr><tr><td>Nd</td><td>Pn</td><td>Wt</td><td>Sr</td><td>Cz</td><td>Pt</td><td>Sb</td></tr>');





dni = new Array(6);

for (i=0;i<6;i++)
{
dni[i]=new Array(7);
for (j=0;j<7;j++) dni[i][j]='';
}






j=0;

var data2=new Date(rok,mies,1);
x=data2.getDay();

for (k=1;k<=31;k++)
{
data2=new Date(rok,mies,k);
l=data2.getDay();


if (k==data.getDate()) dni[j][l]='<b>'+k+'</b>'; else dni[j][l]=k;

if (l==6) j++;

}





for (a=0;a<6;a++)
	{
	document.write('<tr>');
	for (b=0;b<7;b++)
		{
		document.write('<td>'+dni[a][b]+'</td>');	
		}
	document.write('</tr>');
	}



document.write('</table>');
document.close();

}

</script>
</body>
</html>

0

Nie używaj document.write i będzie chodzić. Alternatywami są innerHTML:

table = document.getElementById("kalendarz");
table.innerHTML = "...";

Ewentualnie czysta manipulacja DOM:

table = document.getElementById("kalendarz");
var row = document.createElement("tr"),
  cell = document.createElement("td");

row.appendChild(cell);
table.appendChild(row);

Może też Ci się przydać jQuery :)

0

Działa. Dziękuję za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1