问候,
以下代码适用于警报,但不适用于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>
答案 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>