Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проверка суммы для чекбокса (https://javascript.ru/forum/misc/41680-proverka-summy-dlya-chekboksa.html)

new_guy 25.09.2013 04:46

Проверка суммы для чекбокса
 
Добрый день. Извините за дублирование темы, получилось определить проблему более локально. Суть:
есть чекбоксы:
<form id="num3" name="num3" class="hide2" >
<h2>Заголовок</h2>
<input type="checkbox" name="thirdStep" id="cb1" onchange="checkCB();" /> ch1 <br />
<input type="checkbox" name="thirdStep" id="cb2" onchange="checkCB();"/> ch2 <br /> 
<input type="checkbox" name="thirdStep" id="cb3" onchange="checkCB();"/> ch3 <br /> 
<input type="checkbox" name="thirdStep" id="cb4" onchange="checkCB();"/> ch4 <br /> 
</form>

<!--Блок для вывода результата-->
<div id="cost">
</div>


Нужно что бы при выборе какого либо из чекбоксов в результат добавлялось число, а при снятии галки это же число убиралось.
пробовал так(для первого чекбокса):
//проверяем нажатие чекбокса
function checkCB(){
  var cb1 = document.getElementById("cb1");
  if(cb1.checked) {
    c=0;
    updatePrice(6, 3);
  }else{
    c= 0;
    updatePrice(-4, 3);
  }
  
}

//считаем и выводим результат.
function updatePrice(sum, whereCome){
	
	var place = document.getElementById("cost");
	place.innerHTML = '';
	var span = document.createElement("span");
	
	
	if(whereCome == 3){
        c = sum;
	}
	
	span.innerHTML = "<h1>Стоимость составит: " + (a+b+c)+"</h1>";
	place.appendChild(span);

}

a,b две глобальные переменные из других функций. Дело точно не в них, отключал те функции, результат не менялся.
Сейчас такая беда: нажимаю на чекбокс 1 раз происходит +6, всё в порядке, нажимаю 2 раз(снимаю галку) происходит -10. Снова ставлю +10. Так эту 10 туда сюда и гоняю. Вопрос, как с этим бороться? Почему он суммирует числа из чек и анчек?

ruslan_mart 25.09.2013 06:53

<!DOCTYPE HTML>
<html>
  <head></head>
  <body>
    <input type="checkbox" name="thirdStep" id="cb1" /> ch1 <br />
	<input type="checkbox" name="thirdStep" id="cb2" /> ch2 <br /> 
	<input type="checkbox" name="thirdStep" id="cb3" /> ch3 <br /> 
	<input type="checkbox" name="thirdStep" id="cb4" /> ch4 <br />
    
    <div id="cost">0</div>

    <script>
	var elems = document.querySelectorAll('[id^="cb"]'),
		cost = document.getElementById('cost');
	
    for(var i=0; i<elems.length; i++) elems[i].onchange = function() {
        cost.innerHTML = +cost.innerHTML + (+this.checked || -1); /*(this.checked ? 1 : -1)*/
    }
    </script>

  </body>
</html>

new_guy 25.09.2013 07:18

Большое человеческое спасибо!


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