problem ze skryptami w IE8

0

Witam!

Napisałem sobie taką galerię (kod poniżej): http://naszadek.bplaced.net/Pliki/galeria%20italia.php
Problem w tym, że IE8(nie wiem jak starsze wersje) podczas próby wywołania funkcji MoveThumbs doszukuje się błędu w 39 linii, podczas gdy inne przeglądarki (chrome, opera, ff), ani ja, tego błędu znaleźć nie możemy - ktoś potrafi coś poradzić na to?

Kod:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl">
<head>
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-2" />
<meta http-equiv="Content-Language" content="pl"/>
<meta name="robots" content="all"/>
<meta name="generator" content="Notepad++" />
<title>Italia 2011 - galeria</title>
<link rel="stylesheet" type="text/css" href="../szablony/style.css" />
</head>

<body>
<?php
$photos = array();
$folder = 'italia/miniatury/';
 
$files = scandir($folder);
 
foreach ($files as $file) 
	{
    $file = $folder.$file;
 
    if (!is_file($file)) {
        continue;
    }
 
    $pathinfo = pathinfo($file);
    if ($pathinfo['extension'] != 'png' && $pathinfo['extension'] != 'JPG' && $pathinfo['extension'] !='jpg' && $pathinfo['extension'] != 'jpeg') {
        continue;
    }
    $photos[] = $file;
	}
?>
<script type="text/javascript">
<!--W3e JAVAscript Preset
var z=0;
var name="foto";
var zdjecia = new Array(
						<?php
							for ($x=0; $x < count($photos); $x++) 
							{
							echo '\''.$photos[$x].'\'';
							if ($x<count($photos)-1) echo ',';
							}
						?>
						)
function OpenWindow(element)
	{
	var string = document.getElementById(element).src;
	string = string.replace("middle/", "");
	newWindow = window.open(string, 'width=800,height=600');
	newWindow.focus();
	}
function LoadPhoto(image, element)
	{
		var string = document.getElementById(element).src;
		string = string.replace("miniatury", "middle");
		document.getElementById(image).src = string;
	}
function MoveThumbs(position)
	{
	length=zdjecia.length;
	if (z+position>=0 && z+position<=length)
		{
		z+=position;
		x=0;
		for(i=1;i<=6;i++)
			{
			 if(z+x<length) {document.getElementById(name.concat(i)).src=zdjecia[z+x]; x++;}
			 else {document.getElementById(name.concat(i)).src='puste.png';}
			}
		}
	LoadPhoto('bigimage','foto1');
	}
//-->
</script>
<div id="kontener">
<div id="top"></div>
<div id="menu">
<ul class="menu">
<li><a href="../index.php?show=1">Strona główna</a></li>
<li><a href="../index.php?show=2">Porady</a>
</li>
<li><a href="#">Wyprawy</a>
	<ul>
		<li><a href="#">Szwecja - Norwegia 2009</a>
			<ul>
				<li><a href="../index.php?show=311">Mapa</a></li>
				<li><a href="../index.php?show=312">Dziennik</a></li>
				<li><a href="../index.php?show=313">Warto wiedzieć</a></li>
				<li><a href="../index.php?show=314">Galeria</a></li>
			</ul>
		</li>
		<li><a href="../index.php?show=32">Rumunia 2010</a>
			<ul>
				<li><a href="galeria.php">Galeria</a></li>
			</ul>
		</li>
		<li><a href="../index.php?show=33">Italia 2011</a>
			<ul>
				<li><a href="../index.php?show=331">Mapa</a></li>
				<li><a href="../index.php?show=332">Dziennik</a></li>
				<li><a href="galeria italia.php">Galeria</a></li>
			</ul>
		</li>
	</ul>
</li>
<li><a href="../index.php?show=4">Wycieczki</a>
	<ul>
		<li><a href="../index.php?show=41">Z Wartą warto!</a>
		<ul>
			<li><a href="../index.php?show=411">Opis trasy</a></li>
			<li><a href="../index.php?show=412">Mapa</a></li>
		</ul>
		</li>
	</ul>
</li>
<li><a href="../index.php?show=5">Kontakt</a></li>
<li><a href="../index.php?show=6">Księga Gości</a></li>
</ul>
</div>

<div id="main">
<div style="padding-top:7px;"><img src="italia/middle/CIMG4468.JPG" id="bigimage" alt="" onclick="OpenWindow('bigimage')"/></div><br/>
	<div id="miniatury">
		<div id="navileft" onclick="MoveThumbs(-6)"></div>
			<div class="mini" onclick="LoadPhoto('bigimage','foto1')"><img src="italia/miniatury/CIMG4468.JPG" id="foto1" alt=""/></div>
			<div class="mini" onclick="LoadPhoto('bigimage','foto2')"><img src="italia/miniatury/CIMG4512.JPG" id="foto2" alt=""/></div>
			<div class="mini" onclick="LoadPhoto('bigimage','foto3')"><img src="italia/miniatury/CIMG4522.JPG" id="foto3" alt=""/></div>
			<div class="mini" onclick="LoadPhoto('bigimage','foto4')"><img src="italia/miniatury/CIMG4527.JPG" id="foto4" alt=""/></div>
			<div class="mini" onclick="LoadPhoto('bigimage','foto5')"><img src="italia/miniatury/CIMG4533.JPG" id="foto5" alt=""/></div>
			<div class="mini" onclick="LoadPhoto('bigimage','foto6')"><img src="italia/miniatury/CIMG4536.JPG" id="foto6" alt=""/></div>
		<div id="naviright" onclick="MoveThumbs(+6)"></div>
	</div>
</div>
<div id="bottom"></div>
</div>
</body>
</html>


0

Linia z błędem (#39) to:

length=zdjecia.length;

Naprawdę nie widzisz tu niczego złego?

To błąd jakościowy, który przez przypadek w IE staje się błędem krytycznym. Zmienna length, logicznie rzecz biorąc powinna być zmienną lokalną, tylko na użytek funkcji LoadPhoto(). Ale zapomniałeś użyć var by zadeklarować tę zmienną; nie użyłeś nawet var żeby zadeklarować ją globalnie, jak pozostałe zmienne globalne (choć ta konkretna zmienna nie powinna być globalna).

W JavaScripcie zawsze należy deklarować zmienne przy pomocy var! Ponadto, należy unikać jak się da tworzenia jakichkolwiek zmiennych globalnych!

Wspomniana linia z błędem powinna zostać przerobiona na:

var length=zdjecia.length;
0

Dzięki śliczne za rozwiązanie i rady dot. zmiennych. Co mogłem poprawiłem, ale za wąski w uszach jestem coby przesuwanie miniaturek zrobić bez globalnie zadeklarowanego z-eta... no chyba, że we śnie mnie natchnie;)

Pozdrawiam!

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