» »

[Javascript] Problem z setTimeout-om

[Javascript] Problem z setTimeout-om

matijaz74 ::

Pozdravljeni! Nikakor mi ni jasno.
var velikost=2000;
var time=500;
for(var i=1;i<=velikost;i++){
  setTimeout(function(){
    $("#div_izpis_prenosa").html("Velikost: "+i);
  },time*i);
}

To skripto poganjam preko interneta. Browser mi zablokira in javi javascript napako. Iz kode je razvidno, da želim samo izpis. Tu je nekaj narobe. Rešitev je toliko preko neta. Pa nobena ni prava. Ali kdo od vas pozna pravo rešitev?
Hvala za pomoč in za odgovor.
lp
Matijaž

Qcube ::

Koda deluje.
Verjetno nimaš elementa #div_izpis_prenosa in nima kam izpisati rezultata. Npr.
<body id="div_izpis_prenosa"></body>

matijaz74 ::

Koda izpiše v
<div id="div_izpis_prenosa"></div>
vendar imam občutek da setTimeout ne deluje. No pogledal sem tudi preko boljše in računalnika in deluje koda. Pokaže samo končni rezultat. Jaz pa želim da počasi šteje v intervalu 0,5s. Zato pa sem napisal
time=500
Kodo sem spremenil v to:
velikost=2000
  time=500;
  
  for(i=0;i<velikost;i++){
    setTimeout(function(){
	izpis(i)
    },time);
  }

  function izpis(n){
    $("#div_izpis_prenosa").html("Velikost: "+n);
  }
in deluje enako. S tem setTimeout-om res težave. Hvala za odgovor.
lp
Matijaž

Zgodovina sprememb…

illion ::

velikost=<?php echo $num_rows; ?>;
  var time=1000;
  var i = 0;
  var idInterval = setInterval(function () {
     if(i++ > velikost)
         clearInterval(idInterval);
     else
         izpis(i);
  }, 500);
 
  function izpis(n){
    $("#div_izpis_prenosa").html("Velikost: "+n);
  }

LeQuack ::

Zanka se izvede takoj, tista funkcija, ki je definirana v setTimeout pa se kliče asinhrono po pretečenem času. To pomeni, da je isto kot bi samo zamaknil izvajanje zanke. Ker že uporabljaš jQuery, lahko uporabiš tudi tole, ki podpira sinhrone zakasnitve:
http://benalman.com/projects/jquery-dot...
Quack !

Zgodovina sprememb…

  • spremenil: LeQuack ()

frudi ::

Namesto
var velikost=2000;
var time=500;
for(var i=1;i<=velikost;i++){
  setTimeout(function(){
    $("#div_izpis_prenosa").html("Velikost: "+i);
  },time*i);
}

naredi:
var velikost = 2000;
var time = 500;
for(var i = 1; i <= velikost; i++){
  var foo = function(k) {
    setTimeout(function() {
      $('#div_izpis_prenosa').html('velikost: ' + k);
    }, time * k);
  };
  foo(i);
};


S tem efektivno za vsak klic anonimne funkcije znotraj setTimeout narediš svoj closure, tako da ima vsaka anonimna funkcija dostop do 'svoje' spremenljivke k (mjah, ne znam dobro razložit, kako delujejo closures :)... ko jih boš sam skapiral, ti bo jasno).
1ACDoHVj3wn7N4EMpGVU4YGLR9HTfkNhTd... in case I've written something useful :)

MrBrdo ::

Odvečno kompliciranje, če lahko uporabiš setInterval, ali pa na koncu funkcije kličeš ponovno setTimeout.
MrBrdo

frudi ::

Ja, to bi bilo enostavneje, ampak sedaj ima dobro priložnost, da se nauči, kako delujejo zaprtja :). Če si tega ne razčisti, bo podobne napake ponavljal še naprej.
1ACDoHVj3wn7N4EMpGVU4YGLR9HTfkNhTd... in case I've written something useful :)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Slo-Tech userscripts

Oddelek: Izdelava spletišč
175175 (2627) jype
»

Jquery

Oddelek: Izdelava spletišč
151804 (1528) mk818764
»

Definiranje spremenjivke - javascript

Oddelek: Programiranje
51214 (1137) a-ptuj
»

youtube dolpoteg

Oddelek: Pomoč in nasveti
71102 (1002) pino
»

javascript nerazumljivo

Oddelek: Programiranje
61407 (1264) netanyahu

Več podobnih tem