我试图实现一个简单的表单验证,但不知何故,我无法使它与参数一起工作。
以下是一个输入的代码:
const firstName = document.getElementById("first-name");
const nameRegex = /^[a-zA-Z]{2,15}$/;
firstName.addEventListener("blur", validate(firstName));
function validate(id) {
let re = "";
switch (id) {
case firstName:
re = nameRegex;
break;
case lastName:
re = nameRegex;
break;
case email:
re = emailRegex;
break;
case password:
re = passwordRegex;
break;
}
if (!re.test(id.value)) {
id.parentElement.classList.add("error");
id.parentElement.nextElementSibling.classList.remove("hide");
} else {
id.parentElement.classList.remove("error");
id.parentElement.nextElementSibling.classList.add("hide");
}
}
看起来代码无法进入ID值字段。
作为参考,此代码工作正常:
function validateFirstName() {
if (!nameRegex.test(firstName.value)) {
firstName.parentElement.classList.add("error");
firstName.parentElement.nextElementSibling.classList.remove("hide");
} else {
firstName.parentElement.classList.remove("error");
firstName.parentElement.nextElementSibling.classList.add("hide");
}
}
有谁能给我指个方向吗?(我只想用香草JS)
2条答案
按热度按时间soat7uwm1#
首先,getElementById返回一个HTMLInputElement,而不是元素的实际ID。
正如其他注解中提到的,您的事件侦听器绑定到
validate(firstName)
的返回值,即void
或undefined
。您需要做的是告诉事件侦听器在元素上发生
blur
事件时激发函数。现在,您必须更改validate函数内部的逻辑,以区分不同的输入。
eqzww0vc2#
在事件处理程序中添加了
.addEventListener()
,其中的this
将成为触发事件的元素,这一事实将使您受益匪浅。您可以在
validate()
中使用this
来代替id
略简化示例:
x一个一个一个一个x一个一个二个一个x一个一个三个一个