我有一个函数可以更新一些 DOM 元素,然后使用 setTimeout 调用回调,如下所示(如果提供了 - 否则调用一个虚拟函数):
function updateprogressbar(id,val,label,callback) {
var time = 0;
if (typeof callback === "function") {
var func = callback;
} else {
var func = function () {};
}
$( "#progressbar" ).progressbar({
value: val
});
$( "#progress-label"+id ).html("Overall Progress: "+label);
setTimeout(func(),time);
}
用这个 for 循环调用:
for(var i=0;i<emails.length;i++) {
var howmuchdone = Math.ceil(totalchecked*100/totaltocheck);
updateprogressbar(1,howmuchdone,howmuchdone+"%",function () {
$("#EMAIL_ALL").val($("#EMAIL_ALL").val()+","+getmeadescriptor($.trim(emails[i])));
});
totalchecked = totalchecked + 1;
}
它正在正确执行回调,但我使用 setTimeout 的目的是确保浏览器呈现更新的 DOM 元素。由于我无法弄清楚的原因,DOM 元素没有被更新。
(updateprogressbar 正在 for 循环中调用,传递给它的回调是一个匿名函数,它执行一些简单的处理 - 尽管我认为这与这个问题无关。)
关于为什么我在 updateprogressbar 调用上没有得到任何浏览器渲染的任何想法?
谢谢!
所以,根据@vinhHT的评论,我会尝试这个:
var testfunction = function (value) {
$("#EMAIL_ALL").val($("#EMAIL_ALL").val()+","+value;
}
for(var i=0;i<emails.length;i++) {
var howmuchdone = Math.ceil(totalchecked*100/totaltocheck);
updateprogressbar(1,howmuchdone,howmuchdone+"%",testfunction(getmeadescriptor($.trim(emails[i]))));
totalchecked = totalchecked + 1;
}
最佳答案
删除setTimeout中的()
As setTimeout(func,time);
在 jfriend00 的评论后编辑:
将函数正确声明为:
var func = 函数() { //业务往这里走 }
将代码中对上述回调的调用更正为
setTimeout(func, 时间);
3编辑问题已被编辑:在if-else block 之外声明func,更正setTimeout调用
function updateprogressbar(id, val, label, callback) {
var time = 0;
var func;
if (typeof callback === "function") {
func = callback;
} else {
func = function() {};
}
$("#progressbar").progressbar({
value: val
});
$("#progress-label" + id).html("Overall Progress: " + label);
setTimeout(func, time);
}
关于javascript - setTimeout 和回调 - 不允许浏览器渲染刷新的 DOM 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36232853/