2012-12-11 54 views
3

我有以下的JavaScript。为什么document.write()之后的代码没有执行?

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

回答

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

太谢谢你了@ dystroy,@ WTK,@查希尔·艾哈迈德· –

7

,因为调用document.write含蓄呼吁document.open,它将清除其所具有的文件被称为:

如果文件存在于目标中,则此方法清除rs it

在调用document.write之后,您尝试获取引用的元素不再存在于DOM中,并且抛出错误。如果你在错误控制台看起来应该遵循以下线的东西:与

TypeError: Cannot read property 'txt1' of undefined

1

由于除了dystroy回答,您可以取代document.write

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

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

0

试试这个:

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

您可以写信给文档与

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

只有一次,它适用于整个文档。如果你想要,你将不得不添加一个类/ ID到它,然后把文本在该类/ ID。

1

你销毁的文件写入后关闭流与您的document.write调用的DOM。在一些浏览器中,这也破坏了全局变量。

而是使用:

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