3

我有以下 JavaScript。

<html>
    <head>
        <script language="JavaScript">
            function fdivisible()
            {
                document.write("<h1> Just a javascript demo</h1>");
                var x=document.forms["aaa"]["txt1"].value;  
                alert(x);   
            }
        </script>
    </head>
    <body>
        <form action="#" name="aaa">
            Enter a no. : <input type="text" name="txt1" id="txt1" />
            <input type="button" value="Click" onclick="fdivisible();">
        </form>
    </body>
</html>

问题是,JS函数的第一行正在执行,其余的都被忽略了。如果我注释掉第一行,其余的代码就会被执行。谁能向我解释为什么会这样?

4

8 回答 8

7

因为调用document.write隐式调用document.open,它会清除调用它的文档:

如果目标中存在文档,则此方法将其清除

调用 后document.write,您尝试获取引用的元素不再存在于 DOM 中,并引发错误。如果您查看错误控制台,它应该类似于以下内容:

TypeError: Cannot read property 'txt1' of undefined

于 2012-12-11T12:35:39.687 回答
6

document.write只能在文档的初始加载期间使用。

如果你想在调用函数时插入你的 H1,你可以替换

document.write("<h1> Just a javascript demo</h1>");

var h1 = document.createElement('h1');
h1.innerHTML = " Just a javascript demo";
document.body.appendChild(h1);
于 2012-12-11T12:34:54.017 回答
4

document.write(content) 将内容写入文档流。

您必须在写入文档后关闭流才能继续加载页面

document.write("hello");
document.close();
于 2012-12-11T12:42:40.260 回答
1

除了dystroy答案之外,您还可以替换document.write为:

document.body.innerHTML += '<h1>Javascript demo</h1>
于 2012-12-11T12:36:30.763 回答
1

您正在使用 document.write 调用破坏 DOM。在某些浏览器中,这也会破坏全局变量。

而是使用:

var element = document.createElement('h1');
element.appendChild(document.createTextNode('text'));
document.body.appendChild(element);
于 2012-12-11T12:45:50.490 回答
0

尝试这个:

var x=document.getElementById(txt1).value;
alert(x);
于 2012-12-11T12:37:47.590 回答
0

您可以使用以下命令写入文档

    document.write("<h1> Just a javascript demo</h1>");

只有一次,它适用于整个文档。如果要放置,则必须向其添加类/ id,然后将文本放入该类/ id。

于 2012-12-11T12:38:07.060 回答
0

document.write()在所有 JS 语句的末尾使用。该script元素永远不会在它之后执行。

于 2012-12-11T12:36:47.720 回答