Установите пользовательские сообщения Bootstrap о недействительных/действительных сообщениях

Я создал форму входа/регистрации, используя response.js/bootstrap, и в форме регистрации у меня есть 4 входа. Один для имени пользователя, один для электронной почты и 2 для пароля (1 пароль и 1 для подтверждения). Я хочу показать сообщение, если 2 пароля не совпадают, например, пароли не совпадают.

Я попытался добавить класс boostrap с недействительной обратной связью после проверки ввода двух паролей, но он работает не так, как ожидалось. Вот код, который я использую:

   function handleSubmit(e) {
    e.preventDefault();
    const form = e.target;
    passwordChecker();


    if (form.checkValidity()) {
        handleLoginClick();
        reset();
        console.info("Form submitted successfully");
    } else {
        form.classList.add('was-validated');
    }
  }
function passwordChecker(){
    const confirmPasswordField = document.querySelector("#invalidpassword1");
    if (isRegistering && password !== checkPassword) {
        form.classList.add('was-validated');
        confirmPasswordField.classList.add("invalid-feedback"); 
        console.info("passwords dont match")
    } else {
        confirmPasswordField.classList.remove("invalid-feedback");
        console.info("passwords  match")
    }
  }


<div className = "form-floating mb-3">
                    <input 
                      type = "password" 
                      className = "form-control" 
                      id = "registerPassword" 
                      placeholder = "Enter your password"
                      value = {password}
                      onChange = {(e) => setPassword(e.target.value)}
                      required 
                    />
                    <label htmlFor = "registerPassword">Password</label>
                    <div className='invalid-feedback' id='invalidpassword2'>Please fill out this field</div>
                 
  <div className = "form-floating mb-3">
                    <input 
                      type = "password" 
                      className = "form-control" 
                      id = "confirmPassword" 
                      placeholder = "Confirm your password"
                      value = {checkPassword}
                      onChange = {(e) => setCheckPassword(e.target.value)}
                      required
                    />
                    <label htmlFor = "confirmPassword">Confirm Password</label>
                    <div id='invalidpassword1'>Passwords do not match</div> 
                  </div>

новый код, который я попробовал

<div id='invalidpassword1' className='invalid-feedback'>{checkPassword==='' ? 'Please fill out this field' : 'Passwords do not match'}</div>

теперь появляется правильное сообщение, но уравнение по-прежнему не работает, и когда пароли не совпадают, оно отображается правильно

Поведение ключевого слова "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) для оценки ваших знаний,...
0
0
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Согласно документации начальной загрузки, недействительные/действительные пользовательские сообщения обратной связи должны содержаться внутри <form> с атрибутом novalidate.

https://getbootstrap.com/docs/5.0/forms/validation/#custom-styles

да, я уже добавил это, но не опубликовал, моя плохая <form noValidate id='form' onSubmit = {handleSubmit}>

Γιωργος Ρετσ 19.08.2024 19:17

Можете ли вы привести пример того, что работает не так, как ожидалось?

jjroley 19.08.2024 19:26

Да, я обновил код, который отправил сначала, я проверяю 2 пароля, чтобы убедиться, что они одинаковы, и, как и ожидалось, я получаю сообщение «пароли не совпадают», но ввод действует так, как будто он правильный, он становится зеленым и т. д. Итак, я предположим, что класс не добавлен или что-то в этом роде, потому что я больше не получаю предупреждений в консоли

Γιωργος Ρετσ 19.08.2024 19:39

Я не верю, что формы по умолчанию проверяют совпадение паролей, прямо сейчас парольChecker() вызывается только в том случае, если проверка формы не удалась. Таким образом, у вас могут быть несовпадающие пароли, но form.checkValidity() по-прежнему возвращает true.

jjroley 19.08.2024 19:41

Да, вы правы, я вызвал проверку пароля в начале handleSubmit, и теперь она должна работать, но тем не менее, когда я просто помещаю 1 символ в подтверждение пароля, он мгновенно становится действительным, вместо этого я хочу, чтобы он был равен первому паролю.

Γιωργος Ρετσ 19.08.2024 19:47

Я имею в виду, что я мог бы иметь 5 символов в первом входе и 2 во втором, и это правильно, когда это не должно быть

Γιωργος Ρετσ 19.08.2024 19:47
Ответ принят как подходящий

Вам необходимо вручную установить допустимость поля ввода с помощью setCustomValidity()

Итак, получите поле ввода и установите для него какое-нибудь значение (например, пробел, чтобы браузер не отображал сообщение, а вместо этого отображал только обратную связь BS):

if (isRegistering && password !== checkPassword) {
    form.classList.add('was-validated');
    confirmPasswordField.classList.add("invalid-feedback"); 
    console.info("passwords dont match")

    const input = document.querySelector('#confirmPassword');
    input.setCustomValidity(" ");                
    input.reportValidity();

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