Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
意外的Javascript onkeydown事件和document.write_Javascript_Onkeydown_Document.write - Fatal编程技术网

意外的Javascript onkeydown事件和document.write

意外的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.

我正在学习Javascript,当我测试一些特性时,我发现了一些问题。这是我的密码:

    <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);