Как поправить ошибку Uncaught TypeError: this.switchers[i].hideConfirm is not a function?

Есть сайт https://klen-house.ru/, в нем модуль определения города по ip и странный баг: на главной все ок, работает, города выбираются и т.п. - на внутренних нет, в консоли ошибка Uncaught TypeError: this.switchers[i].hideConfirm is not a function при клике на выбор города (вверху в шапке)

js файл модуля грузится через header, то есть по идее по загрузке все там одинаково.
но почему-то на внутренних выдает ошибку.
не могу сообразить почему.
может есть какие-то мнения куда можно копать, почему именно на внутренних страницах ошибка?
  • Вопрос задан
  • 47 просмотров
Решения вопроса 1
MrDecoy
@MrDecoy Куратор тега JavaScript
Верставший фронтендер
У Вас на сайте расширен прототип Array методом remove, который сделан перечисляемым. (Расширение прототипов давно признано плохой практикой)

Когда в цикле делаете
for (i in this.switchers) {
   this.switchers[i].hideConfirm();
}

Сначала перебирает нормально, а в конце i = "remove".
Cоответственно this.switchers['remove'].hideConfirm // undefined.

Хотфикс - читать перед тем, как пользоваться.
for...in цикл не для массивов.
Используйте forEach вместо него.
Либо добавьте проверку на .hasOwnProperty

P.s. а если бы Вы умели в отладку кода, то решили бы эту проблему минут за 15.
https://learn.javascript.ru/debugging-chrome
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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