使用html5的约束验证时,每次按键时我都会得到连续的提示。
<div class="md-form mb-5">
<input type="username" id="regusername" name='username' class="form-control validate"
value = "<?php echo htmlspecialchars($firstName); ?>" required minlength="2" maxlength="30"/>
<label data-error="wrong" data-success="right" for="regusername">Your username</label>
<span id='usernameStatus2'></span>
</div>
我监听焦点并检查用户名是否可用。
$("#regusername").focusout(function (e) {
var el = document.getElementById(e.target.id);
if (!el.reportValidity()) {
$(el).closest("input,textarea").removeclass('is-valid').addClass("is-invalid");
} else {
$(el).closest("input,textarea").removeclass('is-invalid').addClass("is-valid");
checkAvailability();
}
});
我遇到的问题是每次按键后都会重复验证提示。 1.用户输入无效的用户名,然后单击选项卡。 2.调焦功能被调用。 3.如果根据html5的checkValidity()有效,则调用我的函数checkAvailability()。 4.如果不可用,则将CustomValidity()设置为错误消息,即“不可用”,调用checkValidity()。 5.当焦点仍然放在输入上时,当用户按任意键时,自定义有效性msg提示会造成混乱,因为尽管反复提示,更新后的输入值仍然可用。
HTML5验证程序将继续关注无效输入,并在每次按键时重复无效提示,因此,如果用户名'testuser'不可用,则在'testuser'之后键入其他字符(如'testuser2')将导致无效提示,实际上只有在真正的焦点事件之后才知道的“ testuser2”可用。
如何停止这些重复的提示?
* edit-没什么大不了的,但是还想知道为什么在通过验证后使用.focus()将焦点放在下一个输入上时,随后的输入为什么触发聚焦。 chrome调试器打开后无法重复,因为那样就不会发生。我在对焦功能中尝试了e.preventDefault()和e.stopPropagation()。