Javascript form.checkValidity检查两个密码字段是否匹配
第一个帖子在这里,所以请温柔。我正在努力自学如何为当地俱乐部编写一个响应性强的网站。是否有任何方法可以使用bootstrap 4表单验证方法检查两个密码字段是否相同并相应出错?我可以在服务器端进行验证,但由于我正在进行大量的客户端表单验证,如果我能在提交表单之前检查密码是否相同,那就太好了Javascript form.checkValidity检查两个密码字段是否匹配,javascript,php,jquery,html,Javascript,Php,Jquery,Html,第一个帖子在这里,所以请温柔。我正在努力自学如何为当地俱乐部编写一个响应性强的网站。是否有任何方法可以使用bootstrap 4表单验证方法检查两个密码字段是否相同并相应出错?我可以在服务器端进行验证,但由于我正在进行大量的客户端表单验证,如果我能在提交表单之前检查密码是否相同,那就太好了 <form class="container" id="form-validation" method="post" action="./register.php" novalidate> <
<form class="container" id="form-validation" method="post" action="./register.php" novalidate>
<div class="row">
<div class="col-md-10 mb-3">
<label for="validation1">Username</label>
<input type="text" class="form-control" name="username" id="validation1" placeholder="Username" required pattern="^[_a-zA-Z0-9\-]{5,15}$">
<div class="invalid-feedback">
Must be alpha-numeric, dash or underscore, between 5 & 15 characters
</div>
</div>
</div>
<div class="row">
<div class="col-md-10 mb-3">
<label for="validation2">Password</label>
<input type="password" class="form-control" name="pwd1" id="validation2" placeholder="Password" required pattern="^[_a-zA-Z0-9\-]{5,15}$">
<div class="invalid-feedback">
Must be alpha-numeric, dash or underscore, between 5 & 15 characters
</div>
</div>
</div>
<div class="row">
<div class="col-md-10 mb-3">
<label for="validation3">Confirm Password</label>
<input type="password" class="form-control" name="pwd2" id="validation3" placeholder="Re-enter Password" required pattern="^[_a-zA-Z0-9\-]{5,15}$">
<div class="invalid-feedback">
Must be alpha-numeric, dash or underscore, between 5 & 15 characters and match original Password
</div>
</div>
</div>
<div class="row">
<div class="col-md-10 mb-3">
<button class="btn btn-success" type="submit" value="Send" name="registerbtn">Register</button>
</div>
</div>
</form>
(function() {
"use strict";
window.addEventListener("load", function() {
var form = document.getElementById("form-validation");
form.addEventListener("submit", function(event) {
if (form.checkValidity() == false) {
event.preventDefault();
event.stopPropagation();
}
form.classList.add("was-validated");
}, false);
}, false);
}());
用户名
必须是字母数字、破折号或下划线,介于5到15个字符之间
密码
必须是字母数字、破折号或下划线,介于5到15个字符之间
确认密码
必须是字母数字、破折号或下划线,介于5到15个字符之间,并且与原始密码匹配
登记
(功能(){
“严格使用”;
addEventListener(“加载”,函数(){
var form=document.getElementById(“表单验证”);
表单。addEventListener(“提交”,函数(事件){
if(form.checkValidity()==false){
event.preventDefault();
event.stopPropagation();
}
form.classList.add(“已验证”);
},假);
},假);
}());
您可以进行检查以验证密码值是否相同,如果不相同,则中止提交
var form = document.getElementById("form-validation");
form.addEventListener("submit", function(event) {
if ( document.getElementById("validation2").value != document.getElementById("validation3").value ) {
alert("Password mismatch");
event.preventDefault();
event.stopPropagation();
}
else if (form.checkValidity() == false) {
event.preventDefault();
event.stopPropagation();
}
form.classList.add("was-validated");
}, false);
您只需更改警报窗口即可向用户显示错误文本。下面是一个示例,以了解其外观:
另一个建议是使用类似jQuery的东西,这样语法处理起来就不那么麻烦了。但这取决于您。从您的代码中
checkValidity()
将只检查表单HTML5约束(必需、格式、模式、最小值、最大值)的有效性,但没有验证密码的约束。实际上,这就像比较两个字段的内容是否相同。此外,如果要取消表单提交,还需要返回false代码>在末尾。通常HTML5不会提交有验证错误的表单
在您的情况下,我建议您在输入验证字段时进行验证,并禁用提交按钮,直到密码匹配
document.getElementById('validation3').addEventListener('keyup',function(e){
if(this.value !== document.getElementById('validation2').value){
document.getElementById('validation4').disabled=true;
this.classList.replace('pass','nopass');
}else{
document.getElementById('validation4').disabled=false;
this.classList.replace('nopass','pass');
}
}
您需要为提交按钮分配一个id='validation4'
。要进行可视更改,您可以创建CSS规则来处理此('pass','nopass')。使用此规则应该可以
var form = document.getElementById("form-validation");
form.addEventListener("submit", function(event) {
if ( document.getElementById("validation2").value != document.getElementById("validation3").value ) {
alert("Password mismatch");
event.preventDefault();
event.stopPropagation();
}
else if (form.checkValidity() == false) {
event.preventDefault();
event.stopPropagation();
}
form.classList.add("was-validated");
}, false);
您可以通过JavaScript约束验证API实现此验证,这是一个customError
,您可以在提交表单之前进行设置
我将提供BootStrap4的示例,并假设jQuery是一个可选但常见的BootStrap依赖项,缩写为$(“#pw1”).val()
HTML
密码
重复密码
请重复您的密码
登记
剧本
功能验证_pw2(pw2){
if(pw2.value!=$(“#pw1”).val()){
pw2.setCustomValidity(“重复密码不匹配”);
}否则{
pw2.setCustomValidity(“”;//有效
}
}
重要的部分是#pw2
中的oninput
,它会在每次更改值时尝试验证。然后,setCustomValidity
调用提供无效时显示的用户消息,现在有效时使用空字符串。显示您尝试匹配两个密码的代码
<form>
<div class="form-group">
<label for="pw1">Password</label>
<input type="password" class="form-control"
id="pw1" placeholder="Password"
required minLength=8>
</div>
<div class="form-group">
<label for="pw2">Repeat Password</label>
<input type="password" class="form-control"
id="pw2" placeholder="Password" aria-describedby="pwHelp"
required minLength=6
oninput="validate_pw2(this)">
<small id="pwHelp" class="form-text text-muted">Please repeat your password</small>
</div>
<button type="submit" class="btn btn-primary">Register</button>
</form>
<script>
function validate_pw2(pw2) {
if (pw2.value !== $("#pw1").val()) {
pw2.setCustomValidity("Duplicate passwords do not match");
} else {
pw2.setCustomValidity(""); // is valid
}
}
</script>