Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Не правильно работает калькулятор (https://javascript.ru/forum/dom-window/61402-ne-pravilno-rabotaet-kalkulyator.html)

AlphaKeloid 16.02.2016 23:59

Не правильно работает калькулятор
 
Добрый вечер всем;)

есть калькулятор js + php

function changeText(){
 var resultOne = 0;
 var four = document.getElementById('four').options[document.getElementById('four').selectedIndex].dataset.val;
 var one = document.getElementById('one').options[document.getElementById('one').selectedIndex].dataset.val;
 var two = document.getElementById('two').options[document.getElementById('two').selectedIndex].dataset.val;
 var three = document.getElementById('three').options[document.getElementById('three').selectedIndex].dataset.val;
 var models = document.getElementsByName('models');
if (document.getElementById('seam1').checked)
     var flag = document.getElementById('seam1').dataset.val;
if (document.getElementById('seam2').checked)
     var flag = document.getElementById('seam2').dataset.val;
if (document.getElementById('seam3').checked)
     var flag = document.getElementById('seam3').dataset.val;
if (document.getElementById('rhombus').checked)
     var flag = document.getElementById('rhombus').dataset.val; // 1.1 вместо var flag = пишем var rhombus, чтобы наблюдать действия в коменте 1.2
	 
 resultOne = parseFloat(document.getElementById('models').dataset.val);
 resultOne += parseFloat(one);
 resultOne += parseFloat(two);
 resultOne += parseFloat(three);
 resultOne += parseFloat(flag);
 resultOne += parseFloat(four);
 // resultOne += parseFloat(rhombus);
// 1.2 с этой строкой сумма меняется только при активном checkbox
// если checkbox неактивен вместо суммы появляется значение NaN

 document.getElementById('resultTwo').innerHTML = resultOne;
 document.getElementById("price").value = resultOne;
}


<label class="control-label">Logo <? echo $currbrand; ?></label>
   <select name="Logo" id="four" class="form-control" onchange="changeText()">
   <option data-val='0'>no item</option>
     <?
  foreach($cfg_calc_fancywork["fancywork"] as $work => $price) 
	  { 
		 echo "<option data-val='".$price."'>".$work."</option>"; 
	  }
  ?> 
  </select>
<label class="control-label">items</label>
<div class="checkbox-list">
  <label>
	<input type="radio" id="seam1" data-val="0" value="set item one" checked="checked" name="seam"  onclick="changeText()"/> Item one
  </label>
  
  <label>
    <input type="radio" id="seam2" data-val="<? echo $cfg_calc_line_double; ?>" value="set item" name="seam"  onclick="changeText()"/> Item two
  </label>

  <label>
    <input type="radio" id="seam3" data-val="<? echo $cfg_calc_line_rs; ?>" value="set item" name="seam"  onclick="changeText()"/> Item three
  </label>

   <label>
    <input type="radio" id="rhombus" data-val="<? echo $cfg_calc_line_rhombus; ?>" value="set item" name="seam" onclick="changeText()"/> Item rhombus
  </label>
</div>
<h2 class="pull-right">Стоимость <b><span id="resultTwo"><? echo $cfg_curs["$info"]["$too_info"]; ?></span> руб.</b></h2>
<input name="Сумма заказа " id="price" type="hidden" value="<? echo $cfg_curs["$info"]["$too_info"]; ?>">


Значения цен заданны в конфиг файле.
Поблема в том, что элемент rhoumb коректно работает если у него type radio.
Но, нужен checkbox, вот с ним то и возникают проблемы.
Либо значение суммы не меняется, либо меняется только при активном чекбоксе посредством выбора остальных инпутов.
Если чекбокс не активен, в процессе выбора появляется значение NaN.

Грешу на эти строки в коде
Код:

(document.getElementById('rhombus').checked)
,
ибо по логике вещей получается два чекнутых инпута.
Но, с друго стороны...у них ведь разный тип одни radio, другой checkbox

Не могу понять в чем дело, прошу Вас помочь.

Dilettante_Pro 17.02.2016 06:26

А где у вас var rhombus??

AlphaKeloid 17.02.2016 09:07

ИлиDilettante_Pro,
К 15-ой стрке комментарий есть.
Если так и оставить
if (documrnt.getElementById('rhombus').checked)
var flag = ....
сумма будет меняется не корректно

Dilettante_Pro 17.02.2016 09:29

Я про 23-ю

AlphaKeloid 17.02.2016 10:23

Dilettante_Pro,
Сначала нужно переименовать 15-ую
Т.к. parseFloat(rhombus) будет работать только с этой переменной
Поправьте меня, если я не прав
Мои наблюдения

Dilettante_Pro 17.02.2016 11:47

AlphaKeloid,
у вас в строках 2-7 объявлены все переменные и им присвоены значения, кроме rhombus. Поэтому 23-я строка и не работает. При чем тут переименования? В 15 строке нет переменной rhombus - там есть обращение к элементу DOM с индексом rhombus


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