情况就是这样.我有一些看起来像这样的JavaScript:
function onSubmit() {
doSomeStuff();
someSpan.style.display="block";
otherSpan.style.display="none";
return doLongRunningOperation;
}
Run Code Online (Sandbox Code Playgroud)
当我将其作为表单提交操作并从非IE浏览器运行时,它会快速交换两个跨度可见性并运行长时间的javascript操作.如果我在IE中执行此操作,则直到onSubmit()完全返回后才会执行交换.
我可以通过粘贴一个警告框来强制重绘:
function onSubmit() {
doSomeStuff();
someSpan.style.display="block";
otherSpan.style.display="none";
alert("refresh forced");
return doLongRunningOperation;
}
Run Code Online (Sandbox Code Playgroud)
此外,明显的jquery重构不会影响IE行为:
function onSubmit() {
doSomeStuff();
$("#someSpan").show();
$("#otherSpan").hide();
return doLongRunningOperation;
}
Run Code Online (Sandbox Code Playgroud)
IE8和IE6上存在此行为.反正是否强制在这些浏览器中重绘DOM?
如果这个问题已经存在,我道歉,但我找不到它.
在下面的代码中,假设在每个点更新DOM对象,将触发页面重排/重绘的点?
(function() {
//POINT A
for (var a=0; a<2; a++) {
//POINT B
for (var b=0; b<2; b++) {
//POINT C
}
//POINT D
for (var b=0; b<2; b++) {
//POINT E
}
//POINT F
}
//POINT G
})();
//POINT H
Run Code Online (Sandbox Code Playgroud)
本质上,我不确定DOM是否能够在函数,循环等中间进行更新.每次移动元素时它都能更新吗?只有退出循环后?所有活动循环退出后?所有功能完成后?