使用.each()的jQuery更新元素

use*_*870 2 javascript each jquery

HTML代码:

div id="updatePanel">?

jQuery代码:

var data=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

$.each(data, function(index, value) {
  setTimeout(function(){ 
     $('#updatePanel').text(index);     
  }, 5000 ); 
}); 
Run Code Online (Sandbox Code Playgroud)

我希望updatePanel div内容每5秒更新一次.它应该是1然后等待5秒,显示2,等待另外5秒......

它不像我期望的那样工作.它等待5秒钟并显示9.

请参阅此处的演示:http: //jsfiddle.net/vc7qB/4/

Gab*_*oli 8

更改}, 5000 );}, 5000*index );

这将使每个项目比以前更多等待5秒...

请记住,所有超时都是在同一时间创建的,但延迟时间不同.

最好从单个超时开始,每次执行时创建下一个超时.

像这样

var data=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

    function update(idx){
        setTimeout(function(){
        $('#updatePanel').text( data[idx] );
        if (idx < data.length - 1)
            update(idx+1);
        },1000);
    }

update(0);
Run Code Online (Sandbox Code Playgroud)

  • @ user187870,就像在循环中一样,你的超时都是在毫秒之内相互创建的.他们都等了5秒钟,所以他们几乎都在同一时间到期,所以更新发生在他们所有人身上,最后一个就是你在div中看到的......在我的例子中,我们将他们的索引的延迟加倍数组,所以第一个将等待5000x1,第二个5000x2等...(*每5秒有效*) (2认同)