Onko jQueryä käyttämällä mahdollista sijoittaa setInterval
funktio $(document).ready
funktion sisään? Ainoa keino millä olen tuon saanut hoidettua on kääriä koko hela hoito toisen funktion sisään:
function startTimer () { $(document).ready(function() { //suoritettava koodi }); setInterval( startTimer, 3000 ); }
Tuo argumentti on ihan tavallinen funktio ja sen sisään voi laittaa mitä vaan mitä muidenkin funktioiden sisään voi, mukaan lukien kutsun setInterval
:iin. Vaikea arvata miten olet yrittänyt ja miksi se ei toiminut, kun et näyttänyt koodia.
Eikö tällainen toimi:
function operationToRepeat() { // 3 sekunnin välein suoritettava koodi } $(document).ready(function() { setInterval(operationToRepeat(), 3000); });
Chiman kirjoitti:
setInterval(operationToRepeat(), 3000);
Tuo ei toimi, mutta tämä toimii:
setInterval(operationToRepeat, 3000);
Ok, tuosta näkyy olevan erilaista ohjeistusta liikkeellä. Tällaistakin näkee:
setInterval("operationToRepeat();", 3000);
Tuo parametri voi olla joko funktio jota kutsutaan tai merkkijono joka annetaan eval
-funktiolle argumenttina. Eli:
setInterval(f, 42); -> f() 42ms välein setInterval("f()", 42); -> eval("f()") 42ms välein
Minusta ensimmäinen tapa on kaikin tavoin parempi, mutta jostain kumman syystä monet oppaat suosivat eval
:in käyttämistä.
Okei selvä homma, kiitos vastauksista. Kysynkin saman tien kysymyksen globaaleista muuttujista koska en viitsi sille omaa aihetta tehdä.
Miksi esimerkki 1 toimii, mutta esimerkki 2 ei? Kuinka tuon tausta muuttujan edes voi saada globaaliksi?
//esimerkki 1 $(document).ready(function() { tausta = $("#snake").css("background-color"); alert(tausta); });
//esimerkki 2 tausta = $("#divi").css("background-color"); $(document).ready(function() { alert(tausta); });
Tumettaja kirjoitti:
Miksi esimerkki 1 toimii, mutta esimerkki 2 ei?
Siksi, että jos sivu ei ole vielä ehtinyt latautua kokonaan kun koodi ajetaan, elementtiä jonka id
on divi
ei välttämättä ole olemassa. Juuri tästä syystä käytetään $(document).ready
:ä; sille annettua parametriä kutsutaan vasta kun koko sivu on valmis.
Tumettaja kirjoitti:
Kuinka tuon tausta muuttujan edes voi saada globaaliksi?
Se on globaali ensimmäisessäkin esimerkissä. Jos haluat tehdä siitä paikallisen jonkun funktion sisällä, laita var tausta = ...;
.
Ookei, kiitoksia selvennyksestä (;
Aihe on jo aika vanha, joten et voi enää vastata siihen.