Bootstrap 4 подтверждает, что проверка пароля не работает

Я использую форму начальной загрузки 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>

где тестирование #newPassword === #confirmPassword ?

Mister Jojo 23.12.2020 16:31

@MisterJojo Я обновил свой вопрос

core114 23.12.2020 16:36
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
5
2
5 638
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вам нужно добавить одну строку кода в открывающий тег формы.

<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 09.01.2021 21:51

@edesz Я обновил свой код. В oninput нам нужно вернуть значение true или false

Subhojit Ghosh 11.01.2021 15:55

Просто хочу добавить, что мне нужно указать пустую строку, чтобы проверка была действительной (вместо использования false). Кажется, поле setCustomValidity принимает строку. developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement/…

MarkusAfricanus 19.10.2021 17:25

Я упростил вашу логику проверки и использовал атрибуты 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>

Другие вопросы по теме