let psw = document.querySelector(".login-form .psw").value.trim(); let form = document.querySelector(".login-form"); form.addEventListener("submit",function() { if (psw.length == 0) { alert("输入不能为空") } else if(!reg.test(psw)) { alert("密码请输入6~10位的数字和字母") } e.preventDefault(); }) 为什么运行后类名为psw 的输入框有值还会提示输入不能为空,并且阻止表单提交刷新页面的效果没有出来
时间: 2024-01-22 20:02:12 浏览: 84
这段代码的问题在于,它在表单提交事件的回调函数中使用了 `psw` 变量,但是这个变量是在事件回调函数外部定义的,此时获取的是表单提交前的密码框的值。在事件回调函数内部中,需要重新获取密码框的值,才能正确地进行判断。
另外,事件回调函数中的第二个参数 `e` 并没有被正确地定义,应该改为 `event` 或者其他名字。同时,需要在事件回调函数的最后加入 `return false` 或 `event.preventDefault()` 来阻止表单提交的默认行为,从而避免页面的刷新。
下面是修正过的代码:
```
let form = document.querySelector(".login-form");
form.addEventListener("submit", function(event) {
event.preventDefault(); // 阻止表单提交
let psw = document.querySelector(".login-form .psw").value.trim();
let reg = /^[a-zA-Z0-9]{6,10}$/;
if (psw.length == 0) {
alert("输入不能为空");
} else if (!reg.test(psw)) {
alert("密码请输入6~10位的数字和字母");
}
return false; // 或者使用 event.preventDefault();
});
```
在这个修正后的代码中,首先获取了表单元素,并添加了 `submit` 事件的回调函数。在回调函数中,首先使用 `event.preventDefault()` 阻止表单提交的默认行为。然后重新获取了密码框的值,并进行了判断,根据不同的情况弹出提示框。最后返回 `false` 或调用 `event.preventDefault()` 来阻止表单提交的默认行为。
阅读全文