problem ze skryptami w IE8

Odpowiedz Nowy wątek
2011-09-02 19:30
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>
 
edytowany 1x, ostatnio: vicia85, 2011-09-02 19:36

Pozostało 580 znaków

2011-09-02 20:30

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;

Pozostało 580 znaków

2011-09-02 23:18
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!

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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