javascript - 电子邮件验证功能无法与表单按钮一起正常工作
问题描述
我正在为我的 JS 课程做最后的项目。我遇到了一些障碍,希望得到一些指导。我希望将输入(所有编码都需要在 JS 中完成)用于电子邮件并进行验证。如果电子邮件经过验证,那么它应该发送要写入新网页的输入。如果输入无效,则应发出警报,然后用户应重新输入正确的电子邮件地址。这只是项目的一部分。我正在创建让用户输入要在新页面上写的简历的输入信息。
使用代码的当前状态,它会弹出电子邮件无效的警报框(即使它是无效的)。如果我拿走验证部分,我已经把它写下来了。但是,它写入“未定义”。
//html
<!DOCTYPE html>
<html lan= "en">
<head>
<title>WEB 115 Final Project</title>
</head>
<body>
<script src= "projectJS.js"></script>
<br><br>
<form onsubmit="validateEmail()">
<input type="submit" value="Create Resume">
</form>
</body>
</html>
//JS email
var email = document.createElement("p");
email.innerText = "Enter Email Address:";
document.body.appendChild(email);
var inputEmail = document.createElement("input");
inputEmail.type = "text";
inputEmail.setAttribute("id", "email");
document.body.appendChild(inputEmail);
//email validation on click form button from html
function validateEmail(inputEmail) {
var re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
var testRe = re.test(inputEmail);
testRe;
if (testRe != true) {
window.alert("Invalid Email Address. Please Reenter");
}
else {
var openWindow = window.open("");
openWindow.document.write(inputEmail);
}
}
如果有人愿意就这个问题提出建议,我将不胜感激。谢谢你。
解决方案
问题只是您将inputEmail
作为参数传递给test()
您真正想要测试的时间是inputEmail.value
. 下面的演示应该可以工作:
const validateEmail = (e, inputEmail) => {
e.preventDefault();
if (/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(inputEmail.value)) {
console.log(`${inputEmail.value} is a VALID email address :)`);
return true;
}
console.log(`${inputEmail.value} is an INVALID e-mail address. Please fix!`);
return false;
};
const init = () => {
var email = document.createElement("p");
email.innerText = "Enter Email Address:";
document.body.appendChild(email);
var inputEmail = document.createElement("input");
inputEmail.type = "text";
inputEmail.setAttribute("id", "email");
document.body.appendChild(inputEmail);
document.querySelector('form').addEventListener('submit', e => validateEmail(e, inputEmail));
};
init();
<head>
<title>WEB 115 Final Project</title>
</head>
<body>
<script src="projectJS.js"></script>
<br><br>
<form>
<input type="submit" value="Create Resume">
</form>
</body>