我尝试从一个名为name
的表单和另一个email
的输入中获取基本文本。 email
有效,但name
返回undefined
,我看不出任何差异。
HTML:
<form id = "myForm" action = "" method = "post">
<p id = "pName">Name: <input id = "iName" type = "text" name = "iName" placeholder="Name" /></p>
<p id = "pEmail">Email: <input id = "iEmail" type = "email" name = "iEmail" placeholder="Email" /></p>
</form>
使用Javascript:
name = document.getElementById('iName');
email = document.getElementById('iEmail');
myConsole.innerHTML += "<p>name: " + name.value + "</p>" + "<p>email: " + email.value + "</p>";
输出:
name:undefined
电子邮件:none@none.non
答案 0 :(得分:1)
你的变量&#34;名称&#34;正在返回窗口上下文名称。如果您按如下方式定义变量,则脚本将起作用:
var myName = document.getElementById('iName');
var email = document.getElementById('iEmail');
myConsole.innerHTML += "<p>name: " + myName.value + "</p>" + "<p>email: " + email.value + "</p>";
此外,如果您将javascript放在函数中,则可以安全地使用var name = ...
,因为您的变量将成为本地范围。
答案 1 :(得分:1)
name
已经是全局范围内的声明成员。在较窄的范围内声明您的name
变量,或在脚本中将其称为其他内容。
function myFunction() {
var name = document.getElementById('iName');
var email = document.getElementById('iEmail');
myConsole.innerHTML += "<p>name: " + name.value + "</p>" + "<p>email: " + email.value + "</p>";
}
答案 2 :(得分:1)
因为你在没有var
的情况下声明你的变量,它们被创建为全局对象属性,并且全局对象上已经有一个名为name
的属性,你不能覆盖它(它赢了& #39; t错误,它只是赢了“
以下内容应该可以解决您的问题
vName = document.getElementById('iName');
email = document.getElementById('iEmail');
myConsole.innerHTML += "<p>name: " + vName.value + "</p>" + "<p>email: " + email.value + "</p>";
如果您更好地定义了变量范围,则可能不会出现此错误。我无法看到你的所有代码,但我会假设你的javascript在一个函数中,那么你应该使用var
来声明你的变量,否则它将它们声明为全局对象的属性( Web浏览器中的window
对象)。因此,类似下面的内容将是更好的变量范围,因为javascript中的变量具有函数作用域,并且可以防止与全局对象属性的冲突
function checkForm()
{
var name = document.getElementById('iName');
var email = document.getElementById('iEmail');
myConsole.innerHTML += "<p>name: " + name.value + "</p>" + "<p>email: " + email.value + "</p>";
}
答案 3 :(得分:0)
您需要将“name”和“email”声明为变量。
var name = document.getElementById('iName');
var email = document.getElementById('iEmail');
答案 4 :(得分:-5)
尝试name = document.getElementById(iName);