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>
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>
Entäpä jos annat setTimeout-funktiolle parametriksi sen funktion etkä tekstiä?
setTimeout(funktio, aika);
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.
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/
setTimeout(code,millisec,lang)
Parameter Description code Required. A pointer to a function or the code to be executed millisec Required. The number of milliseconds to wait before executing the code lang Optional. The scripting language: JScript | VBScript | JavaScript
Aivan yhtä pätevä se on funktionakin, ja tuossa tapauksessa se olisi minusta selkeämpi tapa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.