Я использую функцию setCustomValidity
, чтобы проверить, равны ли новый пароль и повторный пароль, но я отладил код, и сравнение было правильным, но сообщение об ошибке не отображается, а запрос на публикацию формы выполнен.
<form action = "/register" method = "post" onsubmit = "check_new_password()">
<div class = "form-group">
и джаваскрипт
function check_new_password(){
var new_pass = $('#new-password').val();
var repeated_pass = $('#repeat-password').val();
if (new_pass != repeated_pass){
$('#repeat-password')[0].setCustomValidity('Password are not equals');
}else{
$('#repeat-password')[0].setCustomValidity('');
}
Вам нужно добавить оператор return
в атрибут onsubmit
, например:
onsubmit = "return check_new_password();"
Итак, функция check_new_password()
должна возвращать логическое значение в соответствии с проверкой.
Не забудьте вызвать метод .reportValidity();
, потому что вы используете метод HTMLObjectElement.setCustomValidity().
Кроме того, вы должны добавить oninput = "setCustomValidity('');"
в поля ввода, чтобы принудительно обновить его состояние.
См. в этом примере:
function check_new_password() {
var new_pass = $('#new-password').val();
var repeated_pass = $('#repeat-password').val();
if (new_pass != repeated_pass) {
$('#repeat-password')[0].setCustomValidity('Password are not equals.');
$('#repeat-password')[0].reportValidity();
return false;
} else {
$('#repeat-password')[0].setCustomValidity('');
return true;
}
}
<link rel = "stylesheet" href = "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity = "sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin = "anonymous">
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class = "container">
<form action = "/register" method = "post" onsubmit = "return check_new_password();">
<div class = "form-group">
<label for = "new-password">Password:</label>
<input id = "new-password" class = "form-control" type = "password" oninput = "setCustomValidity('');" />
</div>
<div class = "form-group">
<label for = "repeat-password">Repeat Password:</label>
<input id = "repeat-password" class = "form-control" type = "password" oninput = "setCustomValidity('');" />
</div>
<div>
<button class = "btn btn-xs btn-primary" type = "submit">Send</button>
</div>
</form>
</div>