虽然循环只返回最终结果
While loop only returning final result
while (counterInc < counter) {
window.setTimeout(function () {
$('#results').text(counterInc);
}, 3000);
counterInc++;
}
此代码应每 3000 毫秒递增一次具有 ID 结果的标记,而不是 while 循环正在运行并返回最终结果。例如,而不是将文本更改为 1、2、3、4、5,..n,它将文本更改为 n。如何让循环每 1000 毫秒更新一次文本字段,每次增量,而不仅仅是最终结果?
试试这个
var counterInc = 0;
var counterMax = 10;
var timeoutId = window.setInterval(function() {
$('#results').text(counterInc++);
if (counterInc >= counterMax) {
window.clearInterval(timeoutId);
}
}, 500);
http://jsfiddle.net/GufCs/4/
发生的事情是你超时每三秒更新一次单元格,但是,你的循环可以在 3 秒内运行大量数字,所以在 setTimeout 中的函数运行时它早已完成。
这将每 500 毫秒触发一次函数(根据您的目的更改为 3000 毫秒(,然后它才会增加计数器。 添加它会在达到计数器最大值时清除间隔。
问题是 setTimeout(( 充当"独立线程"。您设置它,它会在指定的时间量后执行一次。与此同时,"主线程"继续运行:因此您的计数器将在此期间增加。
要理解这个问题,你需要了解什么是闭包。在这里,您希望每次都传递某个值,而不是在循环作用域结束时计算的值。
因此,在声明 setTimout 的那一刻计算值,而不是在调用它时计算值,您可以执行以下操作:http://jsfiddle.net/lechevalierd3on/jhYm3/
var counter = 10;
var counterInc= 0;
while (counterInc < counter) {
window.setTimeout(function () {
var inc = counterInc;
return function(){
$('#results').text(inc);
}
}(counterInc), 1000 * counterInc);
counterInc++;
}
while (counterInc < counter) {
window.setTimeout(function () {
$('#results').text(counterInc);
}, 3000 * counterInc++);
}
相关文章:
- 是否可以将JXBrowser显示的JS确认对话框的结果返回到调用它的JS部分
- 将字符串结果返回到表单元格中的新行中
- 如何从批处理文件调用一个带有2个参数的java脚本函数,并将结果返回到环境变量
- 使用 JSON 和 ExtJS 将 MPDF 结果返回给浏览器
- 将信息结果返回到多个输入字段
- 如何将变量从javascript发送到php并将结果返回给JS
- 将 JavaScript 变量传递给 PHP,并将 PHP 结果返回给 JavaScript 变量
- 当没有结果返回 JavaScript 搜索时显示消息
- 加载相同的结果返回按钮
- 如果搜索框位于_SiteLayout页(在页眉 DIV 中),如何将搜索结果返回给用户
- MVC C#中的自定义操作结果返回特定视图
- 使用javascript/lodash对特定键的相同值进行分组,并对其进行计数,然后将结果返回到数组
- 如何使用javascript将循环结果返回到列中
- 结果返回为“未定义”
- 搜索未检测到结果返回-Selectize.js
- 调用一个打开活动并将活动结果返回给javascript的java函数
- 将PHP结果返回到原始html页面
- ASP.. NET MVC控制器结果返回到视图
- 如何通过AJAX传递值来更改SQL搜索查询并将结果返回给HTML ?
- Asp.net MVC或javascript将另一个页面的结果返回给方法