因此,我正在尝试编写一些HTML代码,当文本字段中至少写入8个字符时,这些代码将触发函数disableBtn()
这就是我目前所拥有的:
Now of course oninput causes the function to be called as soon as anything is written.
Any ways to get around this?
首先,您需要更改在输入时调用的函数,以便对字段进行检查,例如
<input
id="UserID"
class="validate"
type="email"
minlength="8"
required
oninput="disableBtnWhenValid(this)"
>
注意,我将oninput
属性移到了输入元素本身,这允许它将对自身的引用传递给函数disableBtnWhenValid
。
要实现该功能,您有几个选项。你可以对长度进行快速而肮脏的检查:
function disableBtnWhenValid (inputEl) {
if (inputEl.value.length >= 8) {
disableBtn()
}
}
然而,由于您已经在输入上声明了minlength
约束,因此在函数中重复它是不理想的,并且随着代码的更改,这两者可能会失去同步。您可以在这里使用ValidityState API:调用inputEl.validity.tooShort
将返回输入值是否满足minlength
约束。
function disableBtnWhenValid (inputEl) {
if (!inputEl.validity.tooShort) {
disableBtn()
}
}
相反,您可以使用inputEl.checkValidity()
检查所有的有效性约束。在您的情况下,这意味着只有当输入的值为length>=时,才会调用disableBtn
8和匹配电子邮件的模式,即在有效字符之间包含@
。
请注意,validity.tooShort
与IE不兼容。
我的建议:
UserID.addEventListener("input", function() {
if (UserID.value.length == 8) {
// disableBtn();
console.log("8"); // Added here just to check if code works
}
});
<div class="input-field col s12">
<input id="UserID" type="Email" class="validate" minlength="8" required>
<label for="UserID">UserID</label>
</div>