JavaScript检查一个对象数组的结果是错误的,而它应该是真的
JavaScript checking an array of objects is coming up false when it should be true
处理伪登录表单时遇到if-else语句的问题。我创建了一个函数,在提交时检查对象数组,看看它们是否与输入中的文本匹配。只有在找不到电子邮件输入的情况下,才应该打印最后一个else语句。我发现去掉最后一条else语句解决了这个问题,但如果没有匹配项,就无法打印"找不到用户"。很确定这是一个简单的解决方案,但我似乎找不到哪里出了问题。
如何在不删除最后一条else语句的情况下正确运行此语句?(包括HTML供参考。)
var logForm = document.querySelector("#logForm");
var output = document.querySelector("#output");
var users = [{
email: "email1@address.com",
password: "123"
}, {
email: "email2@address.com",
password: "123again"
}, {
email: "email3@address.com",
password: "123again2"
}];
var submitHandler = function(e) {
e.preventDefault();
output.innerText = '';
var inputEmail = logForm.email.value;
var inputPassword = logForm.password.value;
console.log(inputEmail);
console.log(inputPassword);
for (var i = 0; i < users.length; i++) {
if (inputEmail === users[i].email) {
if (inputPassword === users[i].password) {
output.innerHTML = "Successfully logged in as " + users[i].email;
} else {
output.innerHTML = "Invaild password.";
}
} else {
output.innerHTML = "User not found.";
}
}
};
logForm.addEventListener('submit', submitHandler);
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Login Form</title>
</head>
<body>
<p>
<form id="logForm">
<input type="text" name="email" placeholder="E-mail"></input>
<input type="text" name="password" placeholder="Password"></input>
<button type="submit">Log In</button>
</form>
</p>
<p id="output"></p>
</body>
</html>
一旦在数组中找到用户,就需要停止搜索。为此,您需要break
循环或简单地从函数返回:
for (var i = 0; i < users.length; i++) {
if (inputEmail === users[i].email) {
if (inputPassword === users[i].password) {
output.innerHTML = "Successfully logged in as " + users[i].email;
} else {
output.innerHTML = "Invaild password.";
}
break;
} else {
output.innerHTML = "User not found.";
}
}
演示:http://jsfiddle.net/5mfaoz9e/1/
解决问题的三件事:
-
声明一个布尔变量,比如
userFound
,如果在for
循环中找到电子邮件输入,则将其设置为true。 -
一旦找到电子邮件输入,请在
if (inputEmail === users[i].email)
块末尾使用break
语句来停止for
循环。 -
将
output.innerHTML = "User not found."
移到for
循环之外,并且只有在userFound
等于false时才执行该语句。
以下是修改后的代码
var userFound = false;
for (var i = 0; i < users.length; i++) {
if (inputEmail === users[i].email) {
if (inputPassword === users[i].password) {
output.innerHTML = "Successfully logged in as " + users[i].email;
} else {
output.innerHTML = "Invalid password.";
}
userFound = true;
break; // stop the iteration
}
}
if (!userFound) {
output.innerHTML = "User not found."; // only do this if user isn't found
}
演示:http://jsfiddle.net/rjdxxvmk/
相关文章:
- Node.js v6.2.0类扩展不是函数错误
- Jquery菜单操作不稳定,定位不正确,存在一般错误
- document.open/document.write没有正确地清除chrome中的文档——这是chrome的错误吗
- 试图在引导模式内动态生成图表,得到offsetWidth错误
- 为什么会出现错误;未捕获的类型错误:undefined不是函数;
- 我如何修复包含在captcha的addthis中的错误
- 同样,同样的错误'ahorcado.js:26未捕获类型错误:无法读取属性'beginPath'
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- CKFinder 3为所选文件返回错误的URL
- 同位素库错误:未捕获错误无布局模式包装生产线8
- 铬:“;未捕获的语法错误:意外的标记:"
- 如何通过自己获得Chrome扩展的用户反馈/错误报告
- 相位器状态未捕获参考错误
- /undefined在我的404错误日志中多次出现
- Javascript未捕获语法错误意外的标识符错误
- javascript:如何在antlr生成的Lexer中进行错误处理
- Angularjs工厂注入错误
- JavaScript检查一个对象数组的结果是错误的,而它应该是真的
- 这真的是一个奇怪的错误,我没有'以前没有见过,我可以'不要应付