为什么document.write()之后的代码没有被执行?

时间:2012-12-11 12:33:12

标签: javascript

我有以下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函数的第一行正在执行,其余部分被忽略。如果我注释掉第一行,则执行其余代码。任何人都可以向我解释为什么会这样吗?

8 个答案:

答案 0 :(得分:7)

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

  

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

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

  

TypeError: Cannot read property 'txt1' of undefined

答案 1 :(得分: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);

答案 2 :(得分:4)

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

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

document.write("hello");
document.close();

答案 3 :(得分:1)

除了销毁答案外,您还可以将document.write替换为:

document.body.innerHTML += '<h1>Javascript demo</h1>

答案 4 :(得分:1)

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

改为使用:

var element = document.createElement('h1');
element.appendChild(document.createTextNode('text'));
document.body.appendChild(element);

答案 5 :(得分:0)

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

答案 6 :(得分:0)

试试这个:

var x=document.getElementById(txt1).value;
alert(x);

答案 7 :(得分:0)

您可以使用

写入文档
    document.write("<h1> Just a javascript demo</h1>");

只有一次它适用于整个文件。如果你想放置你将不得不添加一个类/ ID,然后将文本放在该类/ id。