2 回答
![?](http://img1.sycdn.imooc.com/54584cde0001d19202200220-100-100.jpg)
TA贡献1891条经验 获得超3个赞
是的,绝对可以。
您出错的地方是您过早地分配了输入的值。
让我们来看看。
var name= document.getElementById("name").value;
var mail= document.getElementById("mail").value;
var pass= document.getElementById("pass").value;
当浏览器解析您的代码时,它会立即为变量分配输入值,并且此时它包含空值。
您此时只想像这样引用输入元素。
var userName= document.getElementById("name"); // note we change the variable from name to userName hence we cannot uses "name" as a variable
var mail= document.getElementById("mail");
var pass= document.getElementById("pass");
并获取 register() 函数中元素的值。
尝试查看整个代码:
const students = [];
let userName = document.getElementById('name')
let mail = document.getElementById('mail')
let pass = document.getElementById('pass')
function register() {
let user = { name: userName.value, email_id: mail.value, pass: pass.value };
console.log(user);
students.push(user);
}
function show() {
setTimeout(function () {
let text = '';
for (const student of students) {
text = `Name=${student.name}, Email=${student.email_id}, Password=${student.pass} <br>`
}
document.getElementById("view").innerHTML = text;
}, 2000);
}
![?](http://img1.sycdn.imooc.com/54584cde0001d19202200220-100-100.jpg)
TA贡献1873条经验 获得超9个赞
问题是您在页面加载时获取输入值,而不是在单击“注册”按钮时获取输入值。
所以将这些行移动到Register函数中。
我必须提到,JSON.parse在自建字符串上使用是一种反模式。您应该使用普通的旧对象文字。
不太重要,但通常的做法是对变量使用驼峰命名法,并为构造函数/类保留 PascalCase。所以重命名User为user. 这同样适用于属性,但我让它们保持原样,因为它会影响您的其他代码:
var Register = function() {
var name= document.getElementById("name").value;
var mail= document.getElementById("mail").value;
var pass= document.getElementById("pass").value;
let user= { "NAME": name, "EMAIL_ID": mail, "PASSWORD": pass };
console.log(user);
student.push(user);
}
添加回答
举报