0

我正在尝试使用 javascript 显示表单输入。所以我使用了这个 JS 代码块

<html>
<head>
</head>  
<body>    
<script>
var text = document.form1.name.value;
function printText(){   
    document.write(text);
}
</script>
<form name=form1>
<input type="text" id="txt" name="name"   ><br><br>
<input type="button" value="Submit!" onClick="printText();" >
</form>
</body>
</html>

但上面的代码不起作用。它给了我无限的输出

但是当我尝试下面的代码时,它的工作......

<html>
<head>
</head>  
<body> 
<script>
function printText(){   
var text = document.form1.name.value;
    document.write(text);
}
</script>
<form name=form1>
<input type="text" id="txt" name="name"   ><br><br>
<input type="button" value="Submit!" onClick="printText();" >
</form>
</body>
</html>

所以我的问题是为什么我们不能var text = document.form1.name.value;在函数之外使用这个语句?

谢谢。

4

3 回答 3

0

您在文档加载时为变量赋值text,起初它是空的。在第二种情况下,您在单击某个按钮上调用函数以获取表单值并将其打印出来

于 2013-07-22T11:35:29.310 回答
0

您的问题只是时间问题:JavaScript 在文档内的位置执行。因此,您访问的 DOM 可能没有完全构建。

因此,在您的第一个示例中,当text = ...执行该行时,解析器不知道您的表单元素。此外,您的命令不会创建对该值的引用,而只会复制它。

但是,在第二种情况下,只定义了函数(这很好)并且在调用它时(并且text评估了您的变量)表单元素存在并且一切正常。

于 2013-07-22T11:37:20.977 回答
0

您在窗口加载时分配表单的值,而那个时候表单没有初始化,这就是它赋予未定义值的原因。

如果要使 var 文本全局化,请执行以下操作:

var text = "";
function printText(){   
    text = document.form1.name.value
    document.write(text);
}

如果您将脚本放在最后,那么它将初始化值 null ,因为在开始时该值将是输入类型的 null 。

因此,您需要在开始时初始化变量,然后您可以将值放入其中。

于 2013-07-22T11:39:01.430 回答