Bazı DOM öğelerini güncelleyen ve ardından setTimeout kullanarak aşağıdaki gibi bir geri arama çağrısında bulunan bir işlev var (bir tane sağlanırsa - aksi halde bir kukla işlev denir):setTimeout ve geri arama - Tarayıcının yenilenen DOM öğeleri oluşturmasına izin vermiyor
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;
}
o yürütülürken doğru geri arama, ama setTimeout kullanarak amacım tarayıcı güncellenen DOM öğelerini hale getirdiğini sağlamaktı:
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);
}
döngü bununla denir. Anlayamadığım nedenlerle DOM öğeleri güncellenmiyor.
(UpdateProgressBar döngü için içinde çağrıldığını ve kendisine geçirilen geri arama bazı basit işlemleri yapar anonim bir fonksiyondur -. Ben bu sorunla ilgili olduğunu sanmıyorum rağmen)
Herhangi bir fikir olarak updateprogressbar çağrısında neden tarayıcı oluşturmuyorum?
Teşekkürler!
Yani, vinhHT yorumuna @ sonrasında bu çalışacağım:
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;
}
Kodunuz, func() 'ın boş bir işlev olduğunu gösterir. Çalışması için DOM manipülasyon kodunuzu bu işleve yerleştirin. Ayrıca, başkalarının işaret ettiği gibi, 0 süresi setTimeout için çok kısadır. – Terry
Geçerli yürütme iş parçacığının bitmesine ve bu şekilde gerçekleşmesi için bir yeniden boyamanın olay döngüsüne dönmesine izin vermelisiniz. Sadece setTimeout() işlevini çağırmak ve kukla bir işleve işaret etmek, setTimeout() işlevini düzgün bir şekilde çağırmış olsanız bile hiçbir şeye yardımcı olmaz. – jfriend00
sonuncusunda ")" eksiksiniz: $ ("# EMAIL_ALL") val ($ ("# EMAIL_ALL"). Val() + "," + getmeadescriptor ($. Trim (e-postalar [i])))); – VinhNT