现在项目中遇到一个问题。就是在前台页面顺序延迟显示后台发送的数据。
比如前台是一个表格,点击前台按钮后,一次获得table上该显示的所有随机序号。
目前的问题不能让这些选择的序号顺序延迟显示。
这个问题类似于在表格中随机点名。
代码不完整:
<table>
<tr><td>11</td><td>12</td><td>13</td><td>14</td></tr>
<tr><td>21</td><td>22</td><td>23</td><td>24</td></tr>
<tr><td>31</td><td>32</td><td>33</td><td>34</td></tr>
<tr><td>41</td><td>42</td><td>43</td><td>44</td></tr>
</table>
<input type="button" value="顺序延迟加载" id="btnRun" />
<script>
$(function(){
$("#btnRun").click(function(){
// rndArray假如是产生的一个瞬间顺序数组,用来控制表格的td变色
var rndArray=[3,7,11,1,12,15];
for(var i=0;i<rndArray.length;i++){
setTimeout(function(){
$("table td").eq(i).addClass("test1").siblings().removeClass("test1");
},1000);
}
})
});
</script>
今天查阅了一下js是单线程执行的,setTimeout("code()",delay)是在delay后将code插入到代码中。
因此这样肯定无法实现我要的功能。不知道有什么好方法可以实现这个功能,
以前在学习视频的时候看到过这个表格随机点名的效果。
求大神指点该怎么弄。
闭包,加参数
$(function(){
$("#btnRun").click(function(){
// rndArray假如是产生的一个瞬间顺序数组,用来控制表格的td变色
var rndArray=[3,7,11,1,12,15];
for(var i=0;i<rndArray.length;i++){
setTimeout(function(e){
$("table td").eq(e).addClass("test1").siblings().removeClass("test1");
},1000);
}
})
});
</script>
没明白?
自己解决了这个问题。采用的是ajax同步请求,在服务端sleep,客户端等待服务端结果,就实现了sleep的功能。
亲 看清楚 $("table td").eq(i).addClass("test1").siblings().removeClass("test1");
当前对象 add 又 remove 到最后 显示的结果自然是一个都没有选中
我更改了下
$(function(){
$("#btnRun").click(function(){
/*我新加的*/$("table td").removeClass("test1")
// rndArray假如是产生的一个瞬间顺序数组,用来控制表格的td变色
var rndArray=[3,7,11,1,12,15];
for(var i=0;i<rndArray.length;i++){
setTimeout(function(){
$("table td").eq(i).addClass("test1");
},1000);
}
})
});