显然,Safari 在提交事件期间不会重新绘制 DOM。我的代码在提交处理程序中包含一个 ajax 函数。我无法将表单或提交按钮的操作更改为<button>
. 在 ajax 函数内部,我正在计算进度条的宽度并相应地调整 div。这适用于 Chrome 和 FF。不在 Safari 中。当我停止浏览器时,会显示进度条。
我想知道如何强制 Safari 在我的 ajax 函数中重新绘制 DOM。它看起来像这样:
$('#webfileuploadform').bind('submit',function(){
var $progress = $('<div id="upload-progress" class="upload-progress"></div>').appendTo($('#webfileuploadform')).append('<div class="progress-container"><div class="progress-info">uploading 0%</div><div class="progress-bar"></div></div>');
function update_progress_bar(){
$.ajax({
dataType:"json",
async: false,
url: progress_url,
success: function(data){
$progress.show(); // This shows the progress bar. I imagine
// this is where I would want to re-paint the DOM
if(data.status == "uploading"){
var total_progress = parseInt(data.uploaded) / parseInt(data.length);
var width = $progress.find('.progress-container').width();
var progress_width = Math.round(width * total_progress);
var progress_px = progress_width + 'px';
$progress.find('.progress-bar').animate({'width':progress_px});
$progress.find('.progress-info').text('uploading ' + parseInt(total_progress*100) + '%');
} else if (data.status == "not-found") {
$progress.find('.progress-bar').animate({'width':'100%'});
$progress.find('.progress-info').text('uploading 100%');
stop = 'Flag for end-of-file';
} else {
//console.log('Ajax Error');
}
},
error: function(textStatus){
console.log("ERROR: " + textStatus);
}
});
// Check flag to see if user stopped the page to cancel the ajax requests
if(typeof stop == 'undefined'){
// Iterates the ajax requests
setTimeout(function(){update_progress_bar()}, freq);
} else {
setTimeout(function(){
$progress.animate({opacity:0.5},1000);
},freq);
$progress.find('.progress-info').text('Refresh the page to continue.');
}
}
// Initiate the ajax requests
setTimeout(function(){update_progress_bar()}, freq);
});