@Glebash111

Как прибавить цену элементов, выбранных через checkbox, к уже существующей цене?

Всем привет! В общем есть форма. Изначально в ней уже есть определенная цена (500). У пользователя есть вариант выбрать дополнительные услуги, у которых тоже есть своя цена. И нужно, чтобы цена за выбранные услуги суммировалась с изначальной ценой (например, 500 + выбранная услуга за 300 будет = 800р если я уберу галочку то цена останется 500).

Вот мой код HTML :
<form name="Sum">    
   	<div class="form-check">
      	<label><input type="checkbox" class="form-check-input" name="" id="service1" value="300" cost="300"> услуга 1 (300₽)</label>
    </div>
    <div class="form-check">
      <div class="mb-3">
      <label><input type="checkbox" class="form-check-input" name="" id="service2" value="500" cost="500" > услуга 2 (500₽)</label>
      </div>
    </div>
    </form>
    <div class="pr-5">
      <strong>Всего: </strong> <span id="sum">500</span> <i >₽</i>
    </div>


Вот код JS. ЗДЕСЬ ПРОБЛЕМА в том, что при прибавлении цены из чекбоксов, у меня прибавляется цена, которая уже до этого была здесь. т.е если я уберу галочку с чекбокса, цена останется. И если я добавлю чекбокс снова, то цена просто прибавится к той цене, что там была, в общем бред получается:
var s = document.forms.Sum,
    d = s.querySelectorAll('input[type="checkbox"]');

s.onchange = function() { // начало работы функции сложения
  var tariff = document.getElementById('sum').innerHTML
  console.log(typeof(tariff)); // проверяю тип
  var tarif = Number(tariff) // задаю числовой тип
  console.log("тут тариф " + tarif)
  console.log(typeof(tarif));
  itog = 0
  var n = s.querySelectorAll('[type="checkbox"]')
  for(var j=0; j<n.length; j++)
    if (n[j].checked){
      tarif += parseFloat(n[j].value)
    }else{
      tarif
    }
    tarif 
    console.log(tarif)
    document.getElementById('sum').innerHTML = tarif;
}

Вот другой код JS. ЗДЕСЬ ПРОБЛЕМА в том, что при активации чекбокса, у меня пропадает первоначальное значение.
ЕСЛИ я уберу itog=0 то браузер выдаст ошибку:
var s = document.forms.Sum,
    d = s.querySelectorAll('input[type="checkbox"][value=""]');

s.onchange = function() { // начало работы функции сложения
  var n = s.querySelectorAll('[type="checkbox"]'),
      itog = 0;
  for(var j=0; j<n.length; j++)
    if (n[j].checked){
    	itog += parseFloat(n[j].value)
    }else{
    	itog;
    } 
    document.getElementById('sum').innerHTML = itog;
}


Знаю, что ответ где-то близко, но я уже всю голову сломал с этим. Буду очень благодарен за помощь!
  • Вопрос задан
  • 244 просмотра
Решения вопроса 1
XanXanXan
@XanXanXan
const sumForm = document.forms.Sum;
const totalBlock = document.querySelector('#sum');
const baseValue = 500;

sumForm.addEventListener('change', () => {
    const checkedImputValues = Array.from(
        document.querySelectorAll('.form-check-input:checked'),
        input => Number(input.value)
    );

    const servicesSum = (checkedImputValues.length !== 0)
        ? checkedImputValues.reduce((a, b) => a + b)
        : 0;

    totalBlock.textContent = servicesSum + baseValue;
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
КРАФТТЕК Санкт-Петербург
от 60 000 до 80 000 ₽
Brightdata Тель-Авив
от 5 500 до 6 500 $
Rocket Брянск
от 60 000 до 100 000 ₽
22 мая 2024, в 10:10
1500 руб./в час
22 мая 2024, в 10:07
25000 руб./за проект
22 мая 2024, в 10:04
2000 руб./за проект