javascript - 当输入长度在 1 到 20 之间时,我想更改文本字段的类别并添加反馈消息,但我不知道为什么它不起作用
问题描述
这是代码。一旦长度有效并添加反馈消息,我将使用引导程序有效和无效类来更改输入设计。
当我运行它时,该功能不起作用并且输入字段保持不变!
var name = document.getElementById("name");
var validFB = document.getELementById("valid-feedback");
var invalidFB = document.getElementById("invalid-feeback");
name.onblur = function lengthCheck() {
if (name.length > 1 && name.length < 20) {
name.classList.remove("form-control");
name.classList.add("form-control is-valid")
validFB.style.display = "block";
} else {
name.classList.remove("form-control");
name.classList.add("form-control is-invalid");
invalidFB.style.display = "block";
}
}
<div class="col-md-4">
<label for="validationServer01" class="form-label">First name</label>
<input type="text" class="form-control" id="name" required>
<div class="valid-feedback" style="display:none;">
Looks good!
</div>
<div class="invalid-feedback" style="display:none;">
Length should not exceed 50 characters.
</div>
</div>
<div class="col-md-4">
<label for="validationServer02" class="form-label">Last name</label>
<input type="text" class="form-control" id="name" required>
<div class="valid-feedback" style="display:none;">
Looks good!
</div>
<div class="invalid-feedback" style="display:none;">
Length should not exceed 50 characters.
</div>
</div>
解决方案
您的帖子中有多个错误。
语法错误
首先,您曾经使用过document.getELementById(..)
而不是document.getElementById(..)
(有一个大写 L 会导致语法错误)
您应该阅读文档以更好地理解语法及其工作原理。
倍数 ID
在您的代码中,您对多个元素使用相同的 ID 值,这可能会在未来导致冲突。
标识符是标识(即标记其身份)唯一对象或唯一对象类的名称
我鼓励您为所有 HTML 标记使用不同的 ID。
输入值
要检查输入长度,您正在使用name.length
但是,这里name
是一个 HTML 元素,而不是您所期望的字符串。要检索输入的值,您应该使用name.value
,然后使用name.value.length
来检查值。
添加类名
您试图一次添加多个类名,classList.add(..)
这会导致以下错误:
无法在“DOMTokenList”上执行“添加”:提供的令牌(“class1 class2”)包含 HTML 空格字符,这些字符在令牌中无效。
结论
您的代码段包含多个错误,您最好同时处理一个。您应该在编码时打开控制台(使用 ctrl+f12)并在编码时检查错误。
编辑
在我看来,我也改用name.onblur
哪个name.addEventListener('blur',...)
更容易使用。您可以在此处查看文档!
let name = document.getElementById("firstName")
let invalidFB = document.getElementById("invalid-feedback-first-name")
let validFB = document.getElementById("valid-feedback-first-name")
name.addEventListener("blur",function(){
if (name.value.length > 1 && name.value.length < 20) {
name.classList.add("form-control");
name.classList.add("is-valid")
validFB.style.display = "block";
invalidFB.style.display = "none";
} else {
name.classList.remove("form-control");
name.classList.add("form-control");
name.classList.add("is-invalid")
invalidFB.style.display = "block";
validFB.style.display = "none";
}
})
<div class="col-md-4">
<label for="validationServer01" class="form-label">First name</label>
<input type="text" class="form-control" id="firstName" required>
<div class="valid-feedback" style="display:none;" id="valid-feedback-first-name">
Looks good!
</div>
<div class="invalid-feedback" style="display:none;" id="invalid-feedback-first-name">
Length should not exceed 50 characters.
</div>
</div>
<div class="col-md-4">
<label for="validationServer02" class="form-label">Last name</label>
<input type="text" class="form-control" id="lastName" required>
<div class="valid-feedback" style="display:none;">
Looks good!
</div>
<div class="invalid-feedback" style="display:none;">
Length should not exceed 50 characters.
</div>
</div>
推荐阅读
- python - 如何获取构成提取的图像分割对象的所有像素的列表/数组?
- javascript - HTML 表单不会返回结果
- kotlin - 无法在 MainActivity 中创建抽象类的实例
- performance - 性能 api 网核插入+更新
- sql - Laravel 控制器在 save() 处插入两个 id 列
- java - 如何分离 Cucumber、TestNg 中的常用步骤类和步骤定义类?
- openwrt - 由于 GLIBC 不匹配,在 Ubuntu 16.04 上构建 OpenWrt 19.07 将失败
- c# - 在.net core 3.1中使用httpclient postasync从webapi获取响应时出现内部服务器错误
- ios - TKSmartCardSlotManager iOS
- python - 诗歌:如何忽略 beta 版本并安装最新的 alpha 版本?