Задать вопрос
  • Событие change. Почему счетчик работает не корректно?

    @alexalexes
    Нужно добавить специальную функцию обертку, чтобы изолировать переменные.
    item.addEventListener('change', (function(item, i) // функция обертка для функции обработчика, содержит переменные, которые нужно изолировать 
    {
    
    return function() { //возврат функции-обработчика для лисенера
         if(item.checked) {
             selectedContactValues.push(parseInt(item.dataset.price));
             countElements[i].value = 1;
         } else {
             selectedContactValues.splice(selectedContactValues.indexOf(item.dataset.price),1);
             countElements[i].value = 0;
         }
            
            resultElement.textContent =  sumArray(selectedContactValues);
        }; // конец функции обработчика событий, переменные которые нужно пропустить через замыкание
    
    })(item, i) // конец функции обертки
    );

    ПС: Возможно, тут нужно клонировать объект item:
    })(JSON.parse(JSON.stringify(item)), i) // конец функции обертки

    Данный способ склонирует только структуру и данные объекта без ссылок на функции и ссылок на DOM.
    ППС: Или брать arr[i] внутри обертки в качестве item, тогда изолировать придется только i:
    item.addEventListener('change', (function(i) // функция обертка для функции обработчика, содержит переменные, которые нужно изолировать 
    {
    
    return function() { //возврат функции-обработчика для лисенера
    let item = arr[i]; // берем item из внешнего массива arr, но по изолированному индексу i     
    if(item.checked) {
             selectedContactValues.push(parseInt(item.dataset.price));
             countElements[i].value = 1;
         } else {
             selectedContactValues.splice(selectedContactValues.indexOf(item.dataset.price),1);
             countElements[i].value = 0;
         }
            
            resultElement.textContent =  sumArray(selectedContactValues);
        }; // конец функции обработчика событий, переменные которые нужно пропустить через замыкание
    
    })(i) // конец функции обертки
    );
    Ответ написан
    2 комментария
  • Событие change. Почему счетчик работает не корректно?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Потому что вы добавляете в selectedContactValues числа, а ищете в нём строку.
    indexOf использует строгое сравнение, ничего не находит и, соответственно, выдаёт -1.
    splice, в свою очередь, получив -1 удаляет первый с конца элемент массива.
    Ответ написан
    1 комментарий
  • Как отвязать placeholder от background у input?

    1. Фон у инпута и футера не совпадают - у инпута стоит прозрачный фон - transparent, а это большая разница
    2. стилизация по умолчанию у инпутов от браузера к браузеру различаться
    Вот так выглядит в firefox/
    6289f0c5cfeb6248396548.png
    Ваш скрин скорее всего из chrome

    3. Добавьте стилей placeholder, например:
    input::placeholder {
    color: #fff;
    opacity: 0.8;

    }
    Ответ написан
    1 комментарий
  • Как выровнять по центру страницы 2-й flex-элемент из 4-х при justify-content: space-between;?

    Devilz_1
    @Devilz_1
    Frontend-Developer
    Поделите хэдер на 3 блока (меню, MYCOMPANY и блок с signup и login).
    Левому и правому задайте ширину в 100% и тогда средний блок окажется строго по середине
    Ответ написан
    1 комментарий