Здравствуйте, если кому-то не жалко времени помогите) Вылетают ошибки в консоль, что они означают понятно(вроде), а как исправить не приходит в голову. Ошибка в том, что при добавлении класса одному элементу, нужно удалить их в других местах, неизвестно в каких именно и скорее всего консоль ругает это.
Вот код на фидл и на хост, спасибо.
https://jsfiddle.net/ayon3ufz/
http://yudkiny.h1n.ru/calcPragaJS/
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 строк, где найти и исправить ошибки не составило труда.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости