Как сделать проверку только той формы, которая вызывает событие?

Песочница. Могу использовать this(тренировалась на конструкторе, в основном), но не понимаю, как здесь его прикрутить.

<form action="" class="pageForm">
  <input type="text" name="" class="data">
  <input type="text" name="" class="data">
  <a href="https://gist.github.com/" target="_blank" class="link">Ссылка</a>
</form>


let pageBody = document.querySelector('body');
let link = document.querySelector('.link');

pageBody.addEventListener('click', function (event) {
  if (event.target.className != 'link') return;
  let validate = document.querySelectorAll('.data').forEach(val => {
    if(val.value == '') {
      val.style.border ="2px solid red";
      return event.preventDefault();
    } else val.style.border ="2px solid green";
  });
});
  • Вопрос задан
  • 426 просмотров
Решения вопроса 1
Получите ближайшую форму при помощи метода .closest() и ищите элементы .data уже в ней.
pageBody.addEventListener('click', function (event) {
  if (event.target.className != 'link') return;

  // Вернет ближайшую к элементу .link форму
  const form = event.target.closest('form');
  let validate = form.querySelectorAll('.data').forEach(val => {
    if(val.value == '') {
      val.style.border ="2px solid red";
      return event.preventDefault();
    } else val.style.border ="2px solid green";
  });
});

Но я бы рекомендовал отдать валидацию на попечение браузера. Стайлинг же неверно заполненных полей можно настроить через css.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@msdosx86
const link = document.querySelector('.link');
link.addEventListener('click', e => {
  e.preventDefault();
  const inputs = document.querySelectorAll('.data');
  inputs.forEach(input => {
    if (input.value == '') {
      input.style.border = '2px solid red';
    } else {
      input.style.border = '2px solid green';
    }
  })
})
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы