Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Оптимизировать функцию валидации (https://javascript.ru/forum/dom-window/84335-optimizirovat-funkciyu-validacii.html)

cheriko 08.08.2022 16:07

Оптимизировать функцию валидации
 
У меня есть функция валидации, которая добавляет классы элементам массива и селекторам. Вот так:

requiredBoxes.forEach(function (input) {
        if (requiredCheckedBoxes.length === 0) {
            input.classList.add('input-error');
        } else {
            input.classList.remove('input-error');
        }
    });

    if (!validateEmail(emailInput.value)) {
        emailInput.classList.add('input-error');
    } else {
        emailInput.classList.remove('input-error');
    }

    if (phoneInput.value.length < 16) {
        phoneInput.classList.add('input-error');
    } else {
        phoneInput.classList.remove('input-error');
    }


Мне нужно применять эту функцию в 2-х местах - addEventListener('submit') и addEventListener('blur').
Вопрос: как это все написать без повторений, учитывая, что добавлять-удалять классы нужно как у элементов массива, так и у отдельных селекторов?

Я ведь не могу вынести addEventListener за пределы цикла:
requiredInputs.forEach(function (input) {
      input.addEventListener('blur', () => {
          if (input.value === '') {
              input.classList.add('input-error');
          } else {
              input.classList.remove('input-error');
          }
      })
  });


Часовой пояс GMT +3, время: 01:08.