意外的Javascript onkeydown事件和document.write
我正在学习Javascript,当我测试一些特性时,我发现了一些问题。这是我的密码:意外的Javascript onkeydown事件和document.write,javascript,onkeydown,document.write,Javascript,Onkeydown,Document.write,我正在学习Javascript,当我测试一些特性时,我发现了一些问题。这是我的密码: <script> function onCreate() { var body = document.getElementsByTagName('body')[0]; body.focus(); body.onkeydown = function(e) { if (e.
<script>
function onCreate() {
var body = document.getElementsByTagName('body')[0];
body.focus();
body.onkeydown = function(e) {
if (e.keyCode == 32) {
alert(1);
sayHey();
}
}
}
function sayHey() {
document.write("Hey ");
document.write("May");
}, 30);
</script>
</head>
<body onload="onCreate()">
</body>
为什么会这样?谁能给我解释一下吗?非常感谢。解析文档后,当前文档将关闭,任何使用
document.write()
的操作都将清除当前文档并打开一个新的空白文档,从而清除您以前拥有的任何事件处理程序或内容
因此,在您的特定示例中,第一次按键会触发事件处理程序。这将显示警报(1)
,然后调用sayHey()
,调用document.write()
,清除当前文档,因此事件处理程序不再存在。因此,第二次按下空格键时,没有事件处理程序,也没有发生任何事情
因此,如果您想在文档加载后向文档添加内容,那么您应该添加类似于
document.createElement()
和.appendChild()
,而不是document.write()
的内容。请记住一个问题。。。如果document.write()
清除当前文档并打开新的空白文档。为什么连续的document.write()
可以工作。。。为什么不打开文档。写入(“May”)覆盖文档。写入(“Hey”)?@CHANist-因为一旦您打开了一个新文档,它将保持打开状态,以便您可以对其进行更多的写入。事实上,文档在最初完成解析时是关闭的,这导致了您的问题。我可以说,当我创建与人机交互链接的事件时,由于计算机不知道何时停止解析,它将在onkeydown()完成一次时进行解析。但不像setInterval,因为计算机知道她需要每隔200微秒运行一次代码。我在这里说的是对的,还是仍然误解了这个问题?非常感谢。@CHANist-我听上去不对,但老实说,我真的不明白你想说什么。这真的很简单。当浏览器加载网页时,它会从原始HTML的开始到结束解析该网页。在解析页面时(在解析器到达页面末尾之前),文档处于“打开”状态,document.write()
将进入该文档。当解析器到达页面HTML的末尾时,文档就会关闭。为响应用户事件(如单击)而运行的代码在文档关闭后运行。
var newParagraph = document.createElement('p');
var text = "Hey May";
var textNode = document.createTextNode(text);
newParagraph.appendChild(textNode);
body.appendChild(newParagraph);