setinterval无法运行document.writeln

时间:2011-03-09 23:26:20

标签: javascript html setinterval

问候,

以下代码适用于警报,但不适用于document.writeln。是因为onload事件吗?如果是这样,浏览器在完成加载后是否应该能够添加更多元素? - 试图理解它是如何工作的(我正在研究jquery)。

<body onload="timeMsg()">
<script type="text/javascript">
        function timeMsg()
        {
        var t=self.setInterval("randInt()",3000);
        }
        function randInt()
        { 
        document.writeln("<br />" +Math.floor(Math.random() * 7)); //doesn't work
        alert(Math.floor(Math.random() * 7));  //works

        }
    </script>
</body>

4 个答案:

答案 0 :(得分:2)

适用于Chrome。也许你应该关注MDC's advice

  

写入已加载但未调用document.open()的文档将自动执行document.open调用。完成写作后,建议拨打document.close(),告诉浏览器完成页面加载。

编辑:正如@Pointy指出的那样(好句子;)),这将取代页面的整个内容。

还有一件事:document.write在XHTML文档中不可用!

结论:不要使用它。

例如,你可以达到同样的效果。

document.body.innerHTML += "<br />" + Math.floor(Math.random() * 7);

var div = document.createElement('div');
div.appendChild(document.createTextNode(Math.floor(Math.random() * 7)));

document.body.appendChild(div);

答案 1 :(得分:2)

浏览器读完完整的HTML页面后,“文档”将关闭。在该点之后调用document.write()(或其朋友)将隐式重新打开文档并删除那里的所有内容。

而不是这样,您可以使用DOM操作API来更新页面。

答案 2 :(得分:0)

不是写入文档,而是将元素注入DOM:

var el = document.body.appendChild(document.createElement("div"));
el.innerHTML = Math.floor(Math.random() * 7));

答案 3 :(得分:0)

替代

<body onload="timeMsg()">

<div id="outputDiv"></div>

<script type="text/javascript">
    function timeMsg()
    {
        var t = self.setInterval("randInt()", 3000);
    }

    function randInt()
    { 
        document.getElementById("outputDiv").innerHTML += "<br />" + Math.floor(Math.random() * 7);
        alert(Math.floor(Math.random() * 7));  //works
    }
</script>