Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: JS: ajastin ongelma

Triton [03.12.2008 17:15:07]

#

Mikäköhän tässä on kun ei toimi? Koodin tarkotus on se, että kun painaa jompaa kumpaa buttonia, niin ruudulle piirretään kuva ja muutaman sekunnin kuluttua uudelleen ohjataan jollekkin sivulle... Jostain syystä setTimeout-funktio ei toimi ja uudelleen ohjausta ei koskaan tapahdu.

<html>
<head>
		<title>Otsikko siis tähän...</title>

		<!-- Aloitetaan JavaScript-ohjelma --->
		<script type="text/javascript">

			/* Tämä funktio uudelleen ohjaa pää sivulle, kun
			gif-animaatio on suoritettu loppuun */
			function gotoMain() {
				//Eli noiden lainausmerkkien väliin annetaan tämän tiedoston osoite
				document.location = "random.html";
			}

			/* Eli tämä on funktio tai aliohjelma mikä suoritetaan
			kun jompaa kumpaa nappia painetaan */
			function perform(response) {

				/* Tämä taas on pelkkä if-lause jossa selvitetään,
				että kumpaa nappia painetaan */
				if (response == "yes") {
					//Ladataan kuvat ruudulle (eli myös video)
					document.write("<img src='yes.gif'>");
					setTimeout("gotoMain()",2000);
				}
				else if (response == "no") {
					//Ladataan kuvat ruudulle (eli myös video)
					document.write("<img src='no.gif'>");
					setTimeout("gotoMain()",2000);
				}
			}

		</script>

</head>

<body>

		<!--- Tässä on kaikki napit --->
		<form name="buttons">
			<input type="button" value="Juu!" onclick="perform('yes')">
			<input type="button" value="Noo!" onclick="perform('no')">
		</form>


</body>


</html>

kasetti [03.12.2008 19:04:35]

#

Entäpä jos muutat document.write --> innerHTML ja lisäät yhden divin?

<html>
<head>
        <title>Otsikko siis tähän...</title>

        <!-- Aloitetaan JavaScript-ohjelma --->
        <script type="text/javascript">

            /* Tämä funktio uudelleen ohjaa pää sivulle, kun
            gif-animaatio on suoritettu loppuun */
            function gotoMain() {
                //Eli noiden lainausmerkkien väliin annetaan tämän tiedoston osoite
                document.location = "random.html";
            }

            /* Eli tämä on funktio tai aliohjelma mikä suoritetaan
            kun jompaa kumpaa nappia painetaan */
            function perform(response) {

                /* Tämä taas on pelkkä if-lause jossa selvitetään,
                että kumpaa nappia painetaan */
                if (response == "yes") {
                    //Ladataan kuvat ruudulle (eli myös video)
                    document.getElementById("kuva").innerHTML="<img src='yes.gif'>";
                    setTimeout("gotoMain()",2000);
                }
                else if (response == "no") {
                    //Ladataan kuvat ruudulle (eli myös video)
                    document.getElementById("kuva").innerHTML="<img src='no.gif'>";
                    setTimeout("gotoMain()",2000);
                }
            }

        </script>

</head>

<body>

        <!--- Tässä on kaikki napit --->
        <form name="buttons">
            <input type="button" value="Juu!" onclick="perform('yes')">
            <input type="button" value="Noo!" onclick="perform('no')">
        </form>

<div id="kuva"></div>

</body>


</html>

Metabolix [03.12.2008 20:43:58]

#

Entäpä jos annat setTimeout-funktiolle parametriksi sen funktion etkä tekstiä?
setTimeout(funktio, aika);

eq [04.12.2008 00:57:05]

#

Metabolix kirjoitti:

Entäpä jos annat setTimeout-funktiolle parametriksi sen funktion etkä tekstiä?
setTimeout(funktio, aika);

setTimeout ottaa itse asiassa funktiokutsun vastaan tekstinä (ainakin Mozilla-selaimissa toimii myös toisenlainen syntaksi, jossa siis annetaan ensimmäisenä parametrinä funktio ja kolmannesta parametristä eteenpäin mahdolliset funktiolle annettavat parametrit).

edit:

Missasin varsinaisen ongelman. Tuleeko siis kuva kuitenkin näkyviin, mutta uudelleenohjausta ei tapahdu? Itse olen joissakin yhteyksissä käyttänyt location.href = "osoite", mutten osaa varmasti sanoa mikä on "virallisin" tapa toteuttaa uudelleenohjaus.

Metabolix [04.12.2008 01:00:28]

#

Tarkemmin katsoen tekstin document.location voisi korvata tekstillä window.location tai jopa window.location.href, joka on tietenkin sama asia kuin lyhyempi location.href. Objekti document viittaa aina nykyiseen sivuun, ja sen osoitettahan ei ole tarkoitus muuttaa (eikä toki voikaan), vaan on tarkoitus ladata toisesta osoitteesta uusi dokumentti. Sen sijaan ikkuna on sama, joten loogisesti sen osoitetta muutetaan. Siksihän selaimenkin osoitekenttä on kiinni selaimen rungossa eikä nettisivun osana. :)

eq kirjoitti:

setTimeout ottaa itse asiassa funktiokutsun vastaan tekstinä

http://www.w3schools.com/htmldom/met_win_settimeout.asp:

setTimeout(code,millisec,lang)

ParameterDescription
codeRequired. A pointer to a function or the code to be executed
millisecRequired. The number of milliseconds to wait before executing the code
langOptional. The scripting language: JScript | VBScript | JavaScript

Aivan yhtä pätevä se on funktionakin, ja tuossa tapauksessa se olisi minusta selkeämpi tapa.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta