LyciferZla
@LyciferZla

Корректировка JS кода ( сложение, вычитание )?

Как выглядит чекбокс
<input type="checkbox" value='2990' name='Price' id="PriceActive" onclick='Check()'>

собственно сам JS код
function Check() {
	var Price = document.getElementsByName('Price');
	var ParsSumMessage = $('.message').val();

	for (var i = 0; i < Price.length; i++) {
	 	if (Price[i].type === 'checkbox' && Price[i].checked) {
	     	rezultat = Price[i].value;
	     	ParsSum = Number(ParsSumMessage) + Number(rezultat);
  			$('.message').attr('value', ParsSum);
	 	} 
	}
}


Код исправно функционирует но нужно сделать так что бы при переводе чекбокс в режим off значения не прибавлялись с атрибута value а отнимались. Помогите пожалуйста, весь день голову уже ломаю(
  • Вопрос задан
  • 164 просмотра
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Раз используется jQuery почему бы сразу не отбирать нужные чекбоксы. И считать сумму их цен. При этом предыдущее значение цены никому уже не нужно, никаких вычитаний.
function Check() {
  var price = 0;
  var PriceBoxes = $('[name=Price][type=checkbox]:checked');
  if (PriceBoxes.length) price = $.makeArray(PriceBoxes)
    .map(el => +el.value)
    .reduce((p,c) => p+c);
    
  $('.message').val(price);
}


Ответ написан
Пригласить эксперта
Ответы на вопрос 1
hzzzzl
@hzzzzl
как-то непонятно,
то есть если чекбокс checked, то результат = результат + 2990, а если !checked, то результат = результат - 2990 (почему так? должно же быть по логике результат = результат без изменений тогда)

или же хватит каждый раз при чеке обнулять результат

function Check() {
  var Price = document.getElementsByName('Price');
  var ParsSumMessage = $('.message').val();
  rezultat = 0;

  // а теперь перебираем все чекбоксы и считаем заново
  for (var i = 0; i < Price.length; i++) {
   	if (Price[i].type === 'checkbox' && Price[i].checked) {
       	rezultat = Price[i].value;
       	ParsSum = Number(ParsSumMessage) + Number(rezultat);
  			$('.message').attr('value', ParsSum);
   	} 
  }
}
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы