Я использую форму начальной загрузки 4. любой, кто знает, как правильно добавлять пароли, не соответствует проверке. Спасибо
// Check if passwords match
$('#pwdId, #confirmPassword').on('keyup', function () {
if ($('#newPassword').val() != '' && $('#confirmPassword').val() != '' && $('#confirmPassword').val() == $('#confirmPassword').val()) {
}
});
// Example starter JavaScript for disabling form submissions if there are invalid fields
(function() {
'use strict';
window.addEventListener('load', function() {
// Fetch all the forms we want to apply custom Bootstrap validation styles to
var forms = document.getElementsByClassName('needs-validation');
// Loop over them and prevent submission
var validation = Array.prototype.filter.call(forms, function(form) {
form.addEventListener('submit', function(event) {
if (form.checkValidity() === false) {
event.preventDefault();
event.stopPropagation();
}
form.classList.add('was-validated');
}, false);
});
}, false);
})();<link rel = "stylesheet" href = "https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity = "sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin = "anonymous">
<script src = "https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity = "sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin = "anonymous"></script>
<script src = "https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js" integrity = "sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin = "anonymous"></script>
<script src = "https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js" integrity = "sha384-w1Q4orYjBQndcko6MimVbzY0tgp4pWB4lZ7lr30WKz0vr/aWKhXdBNmNb5D92v7s" crossorigin = "anonymous"></script>
<form class = "form-signin needs-validation" novalidate><div class = "card shadow-sm">
<div class = "card-body">
<div class = "form-group">
<label class = "sr-only" for = "oldPassword">Current Password</label>
<input class = "form-control form-control-sm" id = "oldPassword" name = "password" placeholder = "Current Password"
required
type = "password" autocomplete = "off" aria-describedby = "inputGroupPrepend">
<div class = "invalid-feedback">
Please enter current password.
</div>
</div>
<div class = "form-group">
<div class = "form-group">
<label class = "sr-only" for = "newPassword">New Password</label>
<div class = "input-group">
<input type = "password" autocomplete = "off" class = "form-control form-control-sm" id = "newPassword" placeholder = "New Password" aria-describedby = "inputGroupPrepend" required>
<div class = "invalid-feedback">
Please enter new password.
</div>
</div>
</div>
</div>
<div class = "form-group">
<label class = "sr-only" for = "confirmPassword">Confirm Password</label>
<div class = "input-group">
<input type = "password" autocomplete = "off" class = "form-control form-control-sm" id = "confirmPassword" placeholder = "Confirm Password" aria-describedby = "inputGroupPrepend" required>
<div class = "invalid-feedback">
Password not a match.
</div>
</div>
</div>
<button id = "submitBtn" class = "btn btn-md btn-primary btn-block" type = "submit">Update</button>
</div></div>
</form>@MisterJojo Я обновил свой вопрос



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам нужно добавить одну строку кода в открывающий тег формы.
<form class = "form-signin needs-validation" novalidate oninput='confirmPassword.setCustomValidity(confirmPassword.value != newPassword.value ? true : false)'>
Я сделал codepen. Пожалуйста, проверьте это.
https://codepen.io/subhojitghosh/pen/JjROMLO
Ссылка: https://stackoverflow.com/a/53065577/10850734
Хороший ответ! Ваш код также работает, если я заменю "Passwords do not match." на "Mismatch." Можем ли мы использовать любую строку, если значения не совпадают друг с другом?
@edesz Я обновил свой код. В oninput нам нужно вернуть значение true или false
Просто хочу добавить, что мне нужно указать пустую строку, чтобы проверка была действительной (вместо использования false). Кажется, поле setCustomValidity принимает строку. developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement/…
Я упростил вашу логику проверки и использовал атрибуты disabled и hidden HTML. Вы можете увидеть работающий отрефакторенный код здесь, в codeandbox
JS-код:
// To ensure the following JS code is executed when the DOM is ready to be manipulated by JS
$(document).ready(function () {
$("#newPassword, #confirmPassword").on("keyup", function () {
// store the `newPassword` and `confirmPassword` in two variables
var newPasswordValue = $("#newPassword").val();
var confirmPasswordValue = $("#confirmPassword").val();
if (newPasswordValue.length > 0 && confirmPasswordValue.length > 0) {
if (confirmPasswordValue !== newPasswordValue) {
$("#password-does-not-match-text").removeAttr("hidden");
$("#submitBtn").attr("disabled", true);
}
if (confirmPasswordValue === newPasswordValue) {
$("#submitBtn").removeAttr("disabled");
$("#password-does-not-match-text").attr("hidden", true);
}
}
});
});
и немного изменил ваш HTML на это:
<link
rel = "stylesheet"
href = "https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
integrity = "sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2"
crossorigin = "anonymous"
/>
<script
src = "https://code.jquery.com/jquery-3.5.1.slim.min.js"
integrity = "sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
crossorigin = "anonymous"
></script>
<script
src = "https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js"
integrity = "sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN"
crossorigin = "anonymous"
></script>
<script
src = "https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js"
integrity = "sha384-w1Q4orYjBQndcko6MimVbzY0tgp4pWB4lZ7lr30WKz0vr/aWKhXdBNmNb5D92v7s"
crossorigin = "anonymous"
></script>
<script src = "./index.js"></script>
<form class = "form-signin needs-validation" novalidate>
<div class = "card shadow-sm">
<div class = "card-body">
<div class = "form-group">
<label class = "sr-only" for = "oldPassword">Current Password</label>
<input
class = "form-control form-control-sm"
id = "oldPassword"
name = "password"
placeholder = "Current Password"
required
type = "password"
autocomplete = "off"
aria-describedby = "inputGroupPrepend"
/>
<div class = "invalid-feedback">Please enter current password.</div>
</div>
<div class = "form-group">
<div class = "form-group">
<label class = "sr-only" for = "newPassword">New Password</label>
<div class = "input-group">
<input
type = "password"
autocomplete = "off"
class = "form-control form-control-sm"
id = "newPassword"
placeholder = "New Password"
aria-describedby = "inputGroupPrepend"
required
/>
<div class = "invalid-feedback">Please enter new password.</div>
</div>
</div>
</div>
<div class = "form-group">
<label class = "sr-only" for = "confirmPassword">Confirm Password</label>
<div class = "input-group">
<input
type = "password"
autocomplete = "off"
class = "form-control form-control-sm"
id = "confirmPassword"
placeholder = "Confirm Password"
aria-describedby = "inputGroupPrepend"
required
/>
<div class = "invalid-feedback">Password not a match.</div>
</div>
</div>
<p id = "password-does-not-match-text" class = "text-danger" hidden>
Your new password does not match
</p>
<button
id = "submitBtn"
class = "btn btn-md btn-primary btn-block"
type = "submit"
disabled
>
Update
</button>
</div>
</div>
</form>
где тестирование #newPassword === #confirmPassword ?