【发布时间】:2021-03-04 09:30:05
【问题描述】:
我想创建一个注册表单。我有 6 个输入:名字、姓氏、电子邮件、密码、密码确认和用户协议复选框。如果输入有class="valid",则值有效,否则无效。我把所有的类都设置为默认的class="invalid"。我想禁用我的提交按钮,直到所有输入字段都有class="valid"。根据我的研究,我看到应该首先使用window.onload eventlistener 禁用该按钮,但我仍然不知道该怎么做。
这是基本形式:
<form class="signup__form" action="/">
<input class="invalid" type="text" name="fname" placeholder="name"/> </br>
<input class="invalid" type="text" name='lname' placeholder="Last Name" /></br>
<input class="invalid" type="email" name='email' placeholder="E-mail" /></br>
<input class="invalid" type="password" name="password" placeholder="Password" />
<input class="invalid" type="password" name="password" placeholder="Password Confirm" />
<input class="invalid" type="checkbox" /> User Agreement</br>
<button type="submit" >Sign Up</button>
</form>
我正在使用事件监听器控制复选框验证:
checkbox.addEventListener('click', (e) => {
if (e.target.checked) {
checkbox.classList.remove('invalid');
checkbox.classList.add('valid');
} else {
checkbox.classList.remove('valid');
checkbox.classList.add('invalid');
}
})
剩下的,我用正则表达式检查:
// Regex values
const regexs = {
fname: /^[a-zA-Z0-9]{3,24}$/,
lname: /^[a-zA-Z0-9]{3,24}$/,
email: /^([a-z\d\.-]+)@([a-z\d-]+)\.([a-z]{2,8})$/,
password: /^[\w@-]{8,20}$/
};
// Regex Validation
const validation = (input, regex) => {
if (regex.test(input.value)) {
input.classList.remove('invalid');
input.classList.add('valid');
} else {
input.classList.remove('valid');
input.classList.add('invalid');
}
}
inputs.forEach((input) => {
input.addEventListener('keyup', (e) => {
validation(e.target,regexs[e.target.attributes.name.value])
})
})
【问题讨论】:
标签: javascript html