我在 Django 应用程序中有一个工作进度条。除了在 Safari 中,该栏仅在奇怪的情况下出现。
首先,我通过 jquery/ajax 组合附加了进度条:
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>');
//This is all one string, I've just broken it up like this so it's readable.
//Called on form submit
$.ajax({
...yada yada...
success: function(data){
$progress.show(); <-- shows the div(s)
...more yada...
在 Firefox 和 Chrome 中,这一切都很好。在 Safari 中,这实际上也可以正常工作,只是不显示。当我打开 Safari 开发人员工具并深入查看时<form>
,我可以看到 DOM 元素正按应有的方式附加到表单中。进度条的宽度和进度信息 div 的文本也在正确更新(在开发人员工具中)。问题是#upload-progress
div 没有显示在浏览器中,即使我看到它存在于开发人员工具中!
让我大吃一惊的是,如果我在 Safari 中单击灰色的“x”来强制停止页面,就会出现进度条!
另一个奇怪的事情是,一旦我单击表单提交,如果我在我的开发人员工具中突出显示任何 dom 元素,整个页面都会以与整个页面周围的包装 div 相同的颜色被空白!此外,如果我在单击提交按钮之前在开发人员工具中突出显示一个元素,然后单击,页面会直接跳转到空白处。我什至不必在开发人员工具中四处走动。
非常奇怪的行为。我不知道是怎么回事...
我读过一些东西说当 css 与 jquery 一起应用时,safari 不会重绘 DOM?我不认为这是真的,但这与它有关系吗?
更新
所以这个问题即使在 ajax 函数之外仍然存在,但在提交处理程序之外工作。那是:
单击提交按钮时问题仍然存在(此处没有 ajax 代码)
$('#webfileuploadform').submit(function(){
$('#webfileuploadform').append('<div id="upload-progress" class="upload-progress">asdf</div>');
$('#upload-progress').append('<div class="progress-container"><div class="progress-info">uploading 0%</div><div class="progress-bar"></div></div>');
...
});
提交处理程序之外的相同代码有效
$('#webfileuploadform').append('<div id="upload-progress" class="upload-progress">asdf</div>');
$('#upload-progress').append('<div class="progress-container"><div class="progress-info">uploading 0%</div><div class="progress-bar"></div></div>');
$('#webfileuploadform').submit(function(){
...
});