Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: jQuery: setInterval

Sivun loppuun

Tumettaja [13.03.2009 17:35:09]

#

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 );
}

jlaire [13.03.2009 19:21:34]

#

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.

Chiman [13.03.2009 19:58:46]

#

Eikö tällainen toimi:

function operationToRepeat() {
    // 3 sekunnin välein suoritettava koodi
}

$(document).ready(function() {
    setInterval(operationToRepeat(), 3000);
});

jlaire [13.03.2009 20:08:40]

#

Chiman kirjoitti:

setInterval(operationToRepeat(), 3000);

Tuo ei toimi, mutta tämä toimii:

setInterval(operationToRepeat, 3000);

Chiman [13.03.2009 20:12:09]

#

Ok, tuosta näkyy olevan erilaista ohjeistusta liikkeellä. Tällaistakin näkee:

setInterval("operationToRepeat();", 3000);

jlaire [13.03.2009 20:18:53]

#

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ä.

Tumettaja [13.03.2009 21:02:17]

#

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);
});

jlaire [13.03.2009 21:07:51]

#

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 = ...;.

Tumettaja [13.03.2009 23:49:41]

#

Ookei, kiitoksia selvennyksestä (;


Sivun alkuun

Vastaus

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

Tietoa sivustosta