Ошибки в консоли (JS)

231
02 октября 2017, 02:55

Здравствуйте, если кому-то не жалко времени помогите) Вылетают ошибки в консоль, что они означают понятно(вроде), а как исправить не приходит в голову. Ошибка в том, что при добавлении класса одному элементу, нужно удалить их в других местах, неизвестно в каких именно и скорее всего консоль ругает это.

Вот код на фидл и на хост, спасибо.

https://jsfiddle.net/ayon3ufz/

http://yudkiny.h1n.ru/calcPragaJS/

Answer 1

408 строка js:

  for (var i = 0; i < val1box.length, val2box.length, val3box.length, val4box.length, val5box.length; i++) {
    val1box[i].classList.remove("space-choosed");
    val3box[i].classList.remove("space-choosed");
    val4box[i].classList.remove("space-choosed");
    val5box[i].classList.remove("space-choosed");
  }

Условия выхода из цикла проверяются все. У Вас через запятую. Второе условие и дальше будет выполняться всегда для val2box.length > 0. Т.е. Ваши условия, для valNbox.length > 0 можно переписать так:

for (var i = 0; i < val1box.length, true, true, true, true; i++) {
...

Т.е. мы имеем или не выполняющийся ни разу или бесконечный цикл.

Я бы, наверное, написал функцию, для valNBox-ов:

function classRemove(valBox) {
      for (var i = 0; i < valBox.length; i++) {
        valBox[i].classList.remove("space-choosed");
    }
}

И вызывал бы:

classRemove(val1box);
classRemove(val2box);

И т.д.

Хотя этот код тоже так себе, но в первом приближении пойдет (честно говоря, я даже не разбирался, что делает этот код). Потом можно вторую волну рефакторинга провести, на основе получившегося.

Кстати, если к Вашим valBox-ам, где нужно удалить класс, можно обратиться через один jQuery-селектор, то это всё вообще в одну строку делается.

P.S. Я заметил, там не только в 408 строке проблемы с условиями выхода из цикла. Еще по коду:

let datef = new Date(df.replace(/(\d+).(\d+).(\d+)/, '$3/$2/$1'));
let datet = new Date(dt.replace(/(\d+).(\d+).(\d+)/, '$3/$2/$1'));

Константы, типа представленной регулярки и текста, если они используются более одного раза (иногда даже если один раз), лучше выносить в отдельные переменные. Тогда, при каком-то изменении нужно будет внести одно изменение, а не искать все подобные константы.

var regexpr = /(\d+).(\d+).(\d+)/;
var pattern = '$3/$2/$1';
let datef = new Date(df.replace(regexpr , pattern));
let datet = new Date(dt.replace(regexpr , pattern));

for лучше писать с новой строки.

Вот так:

var s1 = document.querySelectorAll('.space-1');
var s2 = document.querySelectorAll('.space-2');
var s3 = document.querySelectorAll('.space-3');
...

лучше тоже не делать. Это всё можно внести циклом в массив, тогда проще будет обрабатывать через функцию, которую я привел как пример выше.

Как итог: Ваш код можно уменьшить в 2, а то и в 3 раза. Стремитесь к этому.

Из практики могу сказать, как-то я дебажил js, в файле было 2 тысячи строк. После некоторых попаболей я психанул, и занялся рефакторингом, т.к. этом мне показалось будет быстрее, чем искать и исправлять все ошибки. В итоге вышел файл на 400 строк, где найти и исправить ошибки не составило труда.

READ ALSO
Помогите довести до ума (JSON-&gt;CalendarView)

Помогите довести до ума (JSON->CalendarView)

В MySql Хранится дата minDate(20/01/2017) и maxDate(20/02/2017)Эти даты необходимо получить в приложение и записать в соответствующие места CalendarView

309
Как спарсить инфо с сайта с recaptcha?

Как спарсить инфо с сайта с recaptcha?

Есть 2 сайта с формами поиска информации, мой и чужой, на чужом стоит recaptcha в форме поиска (аякс запрос на скрипт)Требуется с чужого спарсить...

304
Laravel 5 deploy на локальном сервере

Laravel 5 deploy на локальном сервере

Подскажите, пожалуйста, можна-ли расшарить web-проэкт, работающий через localhost open server, с помощью переадресации портов на маршрутизаторе?

225