Почему передается не та функция?

142
25 августа 2021, 06:40

Имеется такой кусок самописного плагина для валидации форм:

;(() => { 
    class Validation { 
 
      constructor(options) { 
        this.fields = options.fields; 
        this.formElement = document.querySelector(options.formSelector); 
 
      } 
 
      init() { 
 
        //Инициализация событий проверки полей 
        if (Object.prototype.toString.call(this.fields) === '[object Array]') { 
 
          this.fields.map((item) => { 
 
            fieldElement = document.querySelector(item.fieldSelector); 
 
            this._connectEventListeners(fieldElement, 'blur change ready', (e) => { 
              //target - DOM элемент, поле 
              //item.text - Условие, по которому нужно проверять строку или регулярное выражение 
              //item.required - Обязательное ли поле 
 
              const target = event.target; 
 
              if (this.fieldTest(target, item.test, item.required) === false) { 
                let failCallback = item.onFail ? item.onFail(target, item.test) : this.onFailField(item, target); 
              } else { 
                let succesCallback = item.onSuccess ? item.onSuccess(target, item.test) : this.onSuccessField(item, target); 
              } 
 
            }) 
 
          }) 
 
 
        } 
 
      } 
 
 
      _connectEventListeners(target, events, callback) { 
        eventsList = events.split(' '); 
        console.log(target) 
        console.log(callback) 
 
 
        for (let i = 0; i < eventsList.length; i++) { 
          target.addEventListener(target, callback); 
        } 
      } 
 
    })();

Проблема состоит в следующем:
В данную функцию this._connectEventListeners передается три аргумента:

  1. первый - DOM элемент к которому привязывается событие(target)
  2. второй - список событий(events)
  3. третий - функция, которая будет вызываться при срабатывании обработчика события (callback)

Третьим аргументом я передаю функцию, но передается не та, что нужна:

В чем проблема?

Answer 1

В callback вы передаёте функцию, которая принимает аргумент "e", но ниже, в теле этой функции, используется имя "event". Попробуйте или использовать "e" или переименовать аргумент на event.

В данный момент ниже по коду у вас target === undefined

READ ALSO
Добавление картинок. attr, jquery

Добавление картинок. attr, jquery

Всем приветНикак не поддается

77
Оптимизировать оператор IF

Оптимизировать оператор IF

Делаю конвертер валют,и в результате у меня получается идентичный кодМожно ли его как-нибудь оптимизировать через тернарный оператор?или...

93
setInterval после clearInterval

setInterval после clearInterval

имеется такой код:

92
Выделить лишнюю часть строки

Выделить лишнюю часть строки

В textarea выходят теги Что можно применить в replace?

103