0

Everything is working but i m unable to set the delay. Also , I will like to stop the increment after a particular interval. kindly please help me

Javascript:

$(document).ready(function() {
    var number = parseInt($('#test').text().trim());
    while (number != 1000) {
        number++;
        $("#test").text(number);
        var number = parseInt($('#test').text().trim());
    }
});

HTML:

<p id="test">1</p>
Amanjot Kaur
  • 2,028
  • 4
  • 18
  • 33
  • 1
    Google: setTimeout setInterval – Amit Jun 26 '15 at 06:29
  • I had already used it but it didn't worked. @Amit setTimeout(1000); – Amanjot Kaur Jun 26 '15 at 06:31
  • 1
    possible duplicate of [Increment integer by 1; every 1 second](http://stackoverflow.com/questions/10586890/increment-integer-by-1-every-1-second) , [Exactly similar](http://stackoverflow.com/q/26271084/3639582) – Shaunak D Jun 26 '15 at 06:41

5 Answers5

5

Use setInterval to add delay.

See comments inline in the code:

$(document).ready(function() {
    var number = parseInt($('#test').text(), 10) || 0; // Get the number from paragraph


    // Called the function in each second
    var interval = setInterval(function() {
        $('#test').text(number++); // Update the value in paragraph

        if (number > 1000) {
            clearInterval(interval); // If exceeded 100, clear interval
        }
    }, 1000); // Run for each second
}); 

DEMO

Tushar
  • 85,780
  • 21
  • 159
  • 179
3

You can use window.setInterval instead. innerText also comes to be an editable property, so you can also try this:

var loop = setInterval(function(){
   ++$("#test")[0].innerText >= 1000 && clearInterval(loop)
}, 10)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<p id="test">0</p>

Edit: Using loops

With the new operators function * and yield * in ECMAScript ES6 you can do exactly what you're doing using loops. Note: If you are learning Javascript, you must read more about its functioning.

function* incrementFn(){
   var number = +$("#test").text();
   while(number != 1000){
      yield number++;
      $("#test").text(number)
   }
}

$(document).ready(function(){
   var incrementLoop = incrementFn();
   var interval = setInterval(function(){
      if(incrementLoop.next().done) clearInterval(interval)
   }, 10)
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<p id="test">0</p>

Note that this will return a syntax error if your browser still uses ES5. Modern browsers already have ES6, you can enable it following this link.

Community
  • 1
  • 1
2

Here is a JSFiddle

$(document).ready(function(){
    setInterval(function () {
       var number = parseInt($('#test').text().trim());
       if (number < 1000) {
          $('#test').html(number+1);
       }
    }, 1000);
});
michelem
  • 14,430
  • 5
  • 50
  • 66
0

Try setInterval:

$(function() {
  var test = $('#test'); // cache object
  setInterval(function() {
    test.text(1 + (+test.text())); // +('3') <-- 3, parsing string to number
  }, 1000);// (in miliseconds) repeat every 1 second
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<p id="test">1</p>
0

  (function() { 
    let counterEl = document.getElementById('counter');
    let number = 0;
    let interval = setInterval(() =>  {
      counterEl.innerText =  number++; 
      if(number > 10) {
        clearInterval(interval);
      }
    }, 1000);// repeat every 1 second
  })();
   <div id="counter">0</div>
Tejas Savaliya
  • 572
  • 7
  • 8