Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Раздельное суммирование значений чекбоксов (https://javascript.ru/forum/misc/67298-razdelnoe-summirovanie-znachenijj-chekboksov.html)

solanos 09.02.2017 07:29

Раздельное суммирование значений чекбоксов
 
Здравствуйте.

Есть такой код:

<form name="Sum">
  <input type="checkbox" value="1"/>
  <input type="checkbox" value="2"/>
  <input type="checkbox"/>
  <input type="checkbox" value=""/>
  <input type="checkbox" value="3"/>
  <input type="checkbox" value="4"/>
  <input type="checkbox" value="5"/>
  <output id="rezultat">Сумма: 0</output>
</form>


var s = document.forms.Sum,
    d = s.querySelectorAll('input[type="checkbox"]:not([value]), input[type="checkbox"][value=""]');
  for (var i = 0; i < d.length; i++) // чтобы не было написано NaN, убираем в disabled пункты, где не прописаны значения
    d[i].disabled = true;
s.onchange = function() { // начало работы функции сложения
  var n = s.querySelectorAll('[type="checkbox"]'),
      itog = 0;
  for(var j=0; j<n.length; j++)
    n[j].checked ? itog += parseFloat(n[j].value) : itog;
    document.getElementById('rezultat').innerHTML = 'Сумма: ' + itog;
}


Данный скрипт суммирует значения чекбоксов без учета id или классов.
Подскажите, пожалуйста, как получить разные суммы значений, например

<form name="Sum">
  <input type="checkbox" class="class1" value="1"/>
  <input type="checkbox" class="class1" value="2"/>
  <input type="checkbox" class="class1" value="3"/>
  <input type="checkbox" class="class1" value="4"/>
  <input type="checkbox" class="class1" value="5"/>
  
  <input type="checkbox" class="class2" value="6"/>
  <input type="checkbox" class="class2" value="7"/>
  <input type="checkbox" class="class2" value="8"/>
  <input type="checkbox" class="class2" value="9"/>
  <input type="checkbox" class="class2" value="10"/>
  <output id="rezultat1">Сумма: 0</output>
  <output id="rezultat2">Сумма: 0</output> 
</form>


Причем отмечать нужно не все чекбоксы, а лишь определенного класса, но эти две суммы менялись и выводились бы одновременно.

Спасибо.

рони 09.02.2017 08:47

Цитата:

Сообщение от solanos
выводились бы одновременно.

куда?

solanos 09.02.2017 08:57

<output id="rezultat1">Сумма: 0</output>
<output id="rezultat2">Сумма: 0</output>

ksa 09.02.2017 09:38

Цитата:

Сообщение от solanos
пожалуйста, как получить разные суммы значений

Как вариант...

<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<script src='http://code.jquery.com/jquery-latest.js'></script>
<!--
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
$(function (){
	$(':checkbox').click(function(){
		var typ=this.className;
		var summ=0;
		$('.'+typ+':checked').each(function(){
			summ+=parseInt(this.value);
		});
		$('span.'+typ).text(summ);
	});
});
</script>
</head>
<body>
<form name="Sum">
	<div>
		<input type="checkbox" class="class1" value="1"/>
		<input type="checkbox" class="class1" value="2"/>
		<input type="checkbox" class="class1" value="3"/>
		<input type="checkbox" class="class1" value="4"/>
		<input type="checkbox" class="class1" value="5"/>
	</div>
	<div>
		<input type="checkbox" class="class2" value="6"/>
		<input type="checkbox" class="class2" value="7"/>
		<input type="checkbox" class="class2" value="8"/>
		<input type="checkbox" class="class2" value="9"/>
		<input type="checkbox" class="class2" value="10"/>
	</div>
	<div>
		<output id="rezultat1">Сумма: <span class=' class1'>0</span></output>
		<output id="rezultat2">Сумма: <span class=' class2'>0</span></output> 
	</div>
</form>
</body>
</html>

solanos 09.02.2017 10:11

Большое спасибо за ответ. Но нужно, чтобы отмечались чекбоксы class1, а сумма значений чекбоксов class2 выводилась автоматически. Собственно говоря, поля чекбоксов class2 должны быть скрытыми.

ksa 09.02.2017 10:22

solanos, тогда зачем вообще те "скрытые" чекбоксы? :) Кто их будет чекать, если их не видно?

solanos 09.02.2017 10:35

Тогда как сделать, чтобы при отметки чекбокса, менялись сразу 2 суммы. Выходит, этот скрипт не подходит. Ksa, Вы очень помогли. Еще раз спасибо.

ksa 09.02.2017 10:37

Цитата:

Сообщение от solanos
как сделать, чтобы при отметки чекбокса, менялись сразу 2 суммы

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

solanos 09.02.2017 10:39

Да, выходит без HTML5 никак.

ksa 09.02.2017 10:41

Цитата:

Сообщение от solanos
выходит без HTML5 никак

Это не HTML5. :)
Атрибуты у тегов существуют очень давно...


Часовой пояс GMT +3, время: 23:00.