Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не правильный выбор условия (https://javascript.ru/forum/misc/43593-ne-pravilnyjj-vybor-usloviya.html)

igor.3dviz 12.12.2013 19:31

Не правильный выбор условия
 
Всем привет!
У меня проблема следующего характера:... делаю калькулятор, и какое бы значение я не вводил в поле Count, переменной cost всегда присваивается 700, и я не пойму в чем проблема.

<script type="text/javascript">


        function calc() {
            

            var is_an = document.getElementById("is_an");

            var count = document.getElementById("count");

            var result = document.getElementById("result"); 

            var price = 0;
            var cost = 0;
                   
          if      (count<50){cost = 1200;}
          else if (count<100){cost = 1110;}
          else if (count<150){cost = 1025;}  
          else if (count<200){cost = 940;}
          else if (count<250){cost = 860;}
          else if (count<300){cost = 780;}
          else               {cost = 700;}
          
          price = parseFloat(count.value)*cost;
          price += (is_an.checked == true) ? price / parseInt(is_an.value) : 0;

          result.innerHTML = price;
        }

</script>


Площадь: <input id="count" onchange="calc()" /><br>

<input type="checkbox" onchange="calc()" value="2" id="is_an" />

<label for="is_an">Авторский надзор</label>

<br/>

<div>
  Стоимость дизайн проекта: 
  
  <span id="result">0
  </span> руб.
</div>

рони 12.12.2013 19:35

igor.3dviz,
странно как-то сравнивать элемент с числом :cray:

igor.3dviz 12.12.2013 19:42

рони,
спасибо, банальная наверно ошибка, но думаю для дизайнера интерьеров простительна.
Исправил, теперь все нормально считает!)

igor.3dviz 13.12.2013 01:47

снова не могу разобраться в простой ситуации:
не работает выбор коэффициента и последующее действие с ним :help:

<script type="text/javascript">


  function calc() 
  {
    var is_an = document.getElementById("is_an");
    var count = document.getElementById("count");
    var rmc = document.getElementById("rmc");
    var result = document.getElementById("result"); 
    var average ;
    var koef;
    var price;
    var cost;
    

    if      (parseFloat(count.value)<50){cost = 1200;}
    else if (parseFloat(count.value)<100){cost = 1110;}
    else if (parseFloat(count.value)<150){cost = 1025;}  
    else if (parseFloat(count.value)<200){cost = 940;}
    else if (parseFloat(count.value)<250){cost = 860;}
    else if (parseFloat(count.value)<300){cost = 780;}
    else               {cost = 700;}
   
    
    average = parseFloat(count.value) / parseInt(rmc.value);
      
    price = parseFloat(count.value)*cost;
    
    //коэф повышения/нижения цены относительно количества помещений
  
    if ( average < 10)           {koef = 1.1; }
    else if ( 10 <= average <=25){koef = 1;   }
    else if (26 <= average <= 40){koef = 0.92;}
    else if (41 <= average <= 60){koef = 0.84;}
    else if (61 <= average <= 80){koef = 0.76;}
    else                         {koef = 0.68;}
	
    if (rmc == ""){}
    else {price = price * koef;}

    //прибавляем авторский надзор
    price += (is_an.checked == true) ? price / parseInt(is_an.value) : 0;
    
    //вывод результата
    result.innerHTML = price;
  }

</script>
        
Площадь: <input id="count" onchange="calc()" /><br>
Кол-во помещений: <input id="rmc" onchange="calc()" /><br>

<input type="checkbox" onchange="calc()" value="2" id="is_an" />

<label for="is_an">Авторский надзор</label>

<br/>

<div>
  Стоимость дизайн проекта: 
  
  <span id="result">0
  </span> руб.
 
</div>

danik.js 13.12.2013 02:51

Цитата:

Сообщение от igor.3dviz
    if      (parseFloat(count.value)<50){cost = 1200;}
    else if (parseFloat(count.value)<100){cost = 1110;}
    else if (parseFloat(count.value)<150){cost = 1025;} 
    else if (parseFloat(count.value)<200){cost = 940;}
    else if (parseFloat(count.value)<250){cost = 860;}
    else if (parseFloat(count.value)<300){cost = 780;}
    else               {cost = 700;}

Ха ха, и вправду видимо дизайнер, раз так код отформатировал ))
Цитата:

Сообщение от igor.3dviz
(is_an.checked == true)

Не надо сравнивать логическое значение с true или false. Оно ведь и так уже логическое.

Ты задаешь вопрос: "чекбокс отмечен - это правда?" ( checkbox.checked == true ? )
Хотя можно просто задать вопрос: "чекбокс отмечен?" ( checkbox.checked ? )

Так что оставляй просто is_an.checked

igor.3dviz 13.12.2013 09:52

danik.js, а это часть, как ни странно, работает :D. к сумме прибавляется то, что надо.
эта часть не работает:

31 if ( average < 10) {koef = 1.1; }
32 else if ( 10 <= average <=25){koef = 1; }
33 else if (26 <= average <= 40){koef = 0.92;}
34 else if (41 <= average <= 60){koef = 0.84;}
35 else if (61 <= average <= 80){koef = 0.76;}
36 else {koef = 0.68;}
37
38 if (rmc == ""){}
39 else {price = price * koef;}

danik.js 13.12.2013 10:17

Не знаю, вбиваю циферки - что-то там считает, отмечаю галочку - цена меняется. Что не так то? Ты можешь нормально описать проблему, или нам тебя уговаривать?
<script type="text/javascript">
 
 
  function calc()
  {
    var is_an = document.getElementById("is_an");
    var count = document.getElementById("count");
    var rmc = document.getElementById("rmc");
    var result = document.getElementById("result");
    var average ;
    var koef;
    var price;
    var cost;
     
 
    if      (parseFloat(count.value)<50){cost = 1200;}
    else if (parseFloat(count.value)<100){cost = 1110;}
    else if (parseFloat(count.value)<150){cost = 1025;} 
    else if (parseFloat(count.value)<200){cost = 940;}
    else if (parseFloat(count.value)<250){cost = 860;}
    else if (parseFloat(count.value)<300){cost = 780;}
    else               {cost = 700;}
    
     
    average = parseFloat(count.value) / parseInt(rmc.value);
       
    price = parseFloat(count.value)*cost;
     
    //коэф повышения/нижения цены относительно количества помещений
   
    if ( average < 10)           {koef = 1.1; }
    else if ( 10 <= average <=25){koef = 1;   }
    else if (26 <= average <= 40){koef = 0.92;}
    else if (41 <= average <= 60){koef = 0.84;}
    else if (61 <= average <= 80){koef = 0.76;}
    else                         {koef = 0.68;}
     
    if (rmc == ""){}
    else {price = price * koef;}
 
    //прибавляем авторский надзор
    price += (is_an.checked == true) ? price / parseInt(is_an.value) : 0;
     
    //вывод результата
    result.innerHTML = price;
  }
 
</script>
         
Площадь: <input id="count" onchange="calc()" /><br>
Кол-во помещений: <input id="rmc" onchange="calc()" /><br>
 
<input type="checkbox" onchange="calc()" value="2" id="is_an" />
 
<label for="is_an">Авторский надзор</label>
 
<br/>
 
<div>
  Стоимость дизайн проекта:
   
  <span id="result">0
  </span> руб.
  
</div>

danik.js 13.12.2013 10:22

Цитата:

Сообщение от igor.3dviz
if (rmc == ""){}

То есть ты сравниваешь DOM-объект с пустой строкой? И какого результата ты ждешь?
Цитата:

Сообщение от igor.3dviz
спасибо, банальная наверно ошибка, но думаю для дизайнера интерьеров простительна.

Ага. Но вот во второй раз нет. Только расстрел.

igor.3dviz 13.12.2013 10:33

danik.js, цена считается первый раз, если ставим галку, то прибавляется еще половина суммы, а если ввод количество помещений, то сумма первоначальная(еще до прибавления галки) должна умножиться на коэф, который как раз в этой части находится.

if (rmc == ""){} - тут я по разному пробовал, исключая свою первую ошибку, яж не совсем дурак :D и гугли как нужно определять пустая строка или нет. Нашел что таким образом.

рони 13.12.2013 10:46

Цитата:

Сообщение от igor.3dviz
if ( 10 <= average <=25)

if ( 10 <= average && average<=25)


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