@helpmeplease196

Почему не работает валидация поля формы?

Как задумано - если в поле "Имя" ничего не указано - фоновый цвет должен стать красным (по факту ничего не происходит).
Обычно проверяю каждый новый этап, так легче понять где ошибка. Тут делала чисто по примеру (https://www.youtube.com/watch?v=PqTrhfjLQBI&t=1890s). И не могу понять где ошибка. Отбражается форма корректно, но валидация не работает.

Заранее спасибо, если кто-то поможет

<div class="form">
  <form action="#" id="form" class="form_body">
    <h1 class="form_title">Прошу перезвонить</h1>
    <div class="form_item">
      <label for="form_name" class="form_label">Имя</label>
      <input type="text" name="name" id="form_name" class="form_input _reg">
    </div>
    <div class="form_item">
      <label for="form_email" class="form_label">Email</label>
      <input type="text" name="email" id="form_email" class="form_input _reg _email">
    </div>
    <div class="form_item">
      <label for="form_phone_num" class="form_label">Номер телефона</label>
      <input type="text" name="phone_num" id="form_phone_num" class="form_input _reg">
    </div>
    <div class="form_item">
      <label for="form_massage" class="form_label">Сообщение</label>
      <textarea name="massage" id="form_massage" class="form_input"></textarea> 
    </div>
    <div class="form_item">
      <div class="checkbox">
        <input type="checkbox" name="check" class="checkbox_input _reg " id="form_checkbox">
        <label for="form_checkbox" class="checkbox_label"> напишите на what's up</label>
      </div>
    </div>
    <button type="submit" class="form_button">отправить</button>
  </form>
</div>


.form {
    max-width: 550px;
    margin: 0px auto;
    padding: 30px;
   }


.form_title  {                   
   font-size: 30px;
font-weight: 700px;
}
.form_item {
  margin-bottom: 20px;
  
 }
.form_label {
font-size: 18px;
display: block;

 }
.form_input { 
height: 50px;
border-radius: 5px;
width: 100%;
}

.form_input._error{
  background-color: red;
}

textarea.form_input{
  min-height: 120px;
  resize: vertical;
}

.checkbox { }
.checkbox_input {
  display: none;
 }
 
.checkbox_label {
  font-size: 16px;
  line-height: 140%;
  display: inline-flex;
  align-items: center;
 
 }

 .checkbox_label::before{
  content: "";
  flex: 0 0 24px;     /*?????????????????????????*/
  height: 24px;
  background-color: blue;
  border-radius: 4px;
  align-self: flex-start;
  margin: 0px 10px 0px 0px;
 }
 .checkbox_label::after{
  content: "";
  width: 16px;
  height: 16px;
  position: absolute;
  background-color: aqua;
  margin-left: 4px;
  margin-bottom: 19px;
 }


"use strict"

document.addEventListener("DOMContentLoaded", function(){


const form = document.getElementById('form');
form.addEventListener('submit', formsend)

async function formsend (e) {
    e.preventDefault();
    let error = formvalidate(form)
}

function formvalidate(form){
let error = 0;
let formreq = document.querySelectorAll("._reg")

for(let index=0; index<formreq.length; index++){
   const input =  formreq[index];
   formRemoveError(input)
   
if(input.value === " "){
    function formAddError(input);
    error++
}
}}

function formAddError(input){
 input.parentElement.classlist.add("error");
 input.classlist.add("error")
}

function formRemoveError(input){
    input.parentElement.classlist.remove("error"); 
    input.classlist.remove("error");
}

});
  • Вопрос задан
  • 663 просмотра
Решения вопроса 1
websitedev
@websitedev
Веб-разработчик. Разрабатываю сложные сайты.
1. Нужно убрать function отсюда
function formAddError(input);
2. Везде заменить classlist на classList
3. Здесь убрать пробел, это проверка на пустую строку.
//Было
if(input.value === " "){
    function formAddError(input);
    error++
}
//Стало
if(input.value === ""){
    function formAddError(input);
    error++
}

4. Добавить класс error
.error {
   background-color: red;
 }


Исправленный пример можете посмотреть здесь
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
SemanticMoscow
@SemanticMoscow
чтобы упростить себе задачу, нужно использовать валидацию формы и на стороне клиента,
JS для этого не требуется!

1. используйте для input соответствующие типы!
type="email",
type="tel"
2. используйте maxlength для ограничения длины строки в поле
3. используйте атрибут placeholder для подсказок
4. используйте атрибут pattern для проверки введённых данных
4.1 для указания ошибки ввода есть псевдоклассы :valid, :invalid и :out-of-range
которые и нужно дёргать если pattern не совпал.
ну и конечно не забывать про атрибут required
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы