我有以下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>
Run Code Online (Sandbox Code Playgroud)
问题是,JS函数的第一行正在执行,其余部分被忽略.如果我注释掉第一行,则执行其余代码.任何人都可以向我解释为什么会这样吗?
因为调用document.writeimplicity调用document.open,它会清除调用它的文档:
如果目标中存在文档,则此方法将清除它
调用之后document.write,您尝试获取引用的元素不再存在于DOM中,并且会引发错误.如果您查看错误控制台,它应该是以下内容:
TypeError: Cannot read property 'txt1' of undefined
document.write 只能在初始加载文档时使用.
如果要在调用函数时插入H1,则可以替换
document.write("<h1> Just a javascript demo</h1>");
Run Code Online (Sandbox Code Playgroud)
同
var h1 = document.createElement('h1');
h1.innerHTML = " Just a javascript demo";
document.body.appendChild(h1);
Run Code Online (Sandbox Code Playgroud)