为什么我对dom的更改直到函数运行后才会显示

rob*_*ing 3 javascript jquery dom

我的eval()电话是相当密集的,需要大约一秒钟来生成每个解决方案.

因此,生成每个段落元素(然后我附加到dom - document.getElementById('project_euler_solutions').appendChild(p); )需要大约一秒钟.

因此,我希望每个段落在网页上显示大约一秒钟.(所以大约40秒后我会有40段说).

但是,当我单击按钮时,40秒内没有任何操作,然后所有解决方案立即出现.

为什么在更新dom之前等待所有人完成?

我认为每个段落一旦附加到dom就会出现

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
    <script src="http://ajax.microsoft.com/ajax/jquery/jquery-1.6.2.min.js"></script>
    <script src="/statics/project_euler.js"></script>
    <script type="text/javascript">
        $(document).ready(function(){
            $("button").click(function(){
                for (var i in window) {
                    if (i.slice(0,5) == "solve") {
                        var p = document.createElement('p');
                        p.innerHTML = "running: " + i;
                        document.getElementById('project_euler_solutions').appendChild(p);
                        var p = document.createElement('p');
                        p.innerHTML = "Solution: " + eval(i + "()");
                        document.getElementById('project_euler_solutions').appendChild(p);
                    }
                }
            });
        });
    </script>
</head>

<body>
<div id="project_euler_solutions"><button>Calculate solutions</button></button></div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

zer*_*kms 5

Javascript在与UI相同的线程中运行,因此您需要为DOM提供控制权以重新绘制所有更改.