javascript - 在使用 Javascript 传递一组 if 语句之前,如何禁用按钮?
问题描述
使用事件侦听器将一系列if
语句附加到输入元素;在所有这些条件语句都通过之前,如何禁用按钮?
button = document.querySelector("#submit")
button.disabled = true
passwordInput.addEventListener("keyup", e => {
let inputValidator = e.target.value
let numberValidator= inputValidator.match(/\d+/g)
if (inputValidator === "") {
errorEmpty.style.display = "block"
} else {
errorEmpty.style.display = "none"
}
if (inputValidator.length < 20) {
errorLength.style.display = "block"
} else {
errorLength.style.display = "none"
}
if (inputValidator === inputValidator.toLowerCase()) {
errorUppercase.style.display = "block"
} else {
errorUppercase.style.display = "none"
}
if (inputValidator === inputValidator.toUpperCase()) {
errorLowercase.style.display = "block"
} else {
errorLowercase.style.display = "none"
}
if (numberValidator == null) {
errorNumber.style.display = "block"
} else {
errorNumber.style.display = "none"
}
})
解决方案
相信你可以简单如下:
假设在您通过测试之前它是无效的。注意:您可以简单地使用单个 RegEx 来测试 20-30 个字符之间的所有数字。这更容易阅读。
如果您需要额外的测试,只需将它们添加到处理程序中。
简单演示:
const button = document.querySelector('#submit');
const error = document.querySelector('#error');
// assume invalid until tests pass
button.disabled = true;
passwordInput.addEventListener('keyup', (e) => {
const currentValue = e.target.value;
// only numbers, between 20 and 30 characters
const isNumber = /^\d{20,30}$/.test(currentValue);
if (!isNumber) {
error.textContent = 'must be numeric, min 20 chars, max 30';
return;
}
// if you need another test
/*
if (...) {
error.textContent = 'must contain x/y etc';
return;
}
*/
// ok
error.textContent = '';
button.disabled = false;
});
#error {
color: red;
display: block;
}
<div id="error"> </div>
<input type="text" id='passwordInput' /><button id="submit" type="submit">Submit</button>
推荐阅读
- sql - SQL 查询:将最高评论与评论作者匹配 - 电影数据库
- python - 负责打开和调整照片大小的功能不起作用
- akka - Akka:有一个永远不会拉的水槽吗?
- c++ - 使用 boost::adjacency_list 的自定义边属性迭代边
- c++ - 我试图将 Javascript str.split(delimiter) 函数重新创建到 C++ 中,但我不知道如何解决这个问题
- javascript - 重定向到浏览器中没有弹出菜单的链接
- python - 我如何遍历列(类型:系列)
- postgresql - 我应该使用 JSONB 还是 JOIN 表来记录 PostgreSQL 中的用户操作和注释?
- java - 使用 pache poi 4.1.0 给出多个错误
- linux - 我可以在运行时限制我在 CGI 脚本中允许进入的文件夹吗?