Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Подсчет значений


Автор: s1lver 1.9.2013, 12:36
Доброго времени суток!

Есть проблемка с подсчетом значении из формы.
Форма
Код

        <form method="post" name="test_gas" onsubmit="return false">
            <label>Пробег (тыс.км в год)<br>
                <select name="probeg" class="options">
                    <option value="0" selected></option>
                    <option value="0">до 10 тыс</option>
                    <option value="1">10 - 20 тыс</option>
                    <option value="3">20 - 30 тыс</option>
                    <option value="5">30 - 40 тыс</option>
                    <option value="10">более 40  тыс</option>
                </select>
            </label><br>
            <label>Используемый бензин<br>
                <select name="fuel" class="options">
                    <option value="0" selected></option>
                    <option value="2">АИ80</option>
                    <option value="5">АИ92</option>
                    <option value="7">АИ95</option>
                    <option value="8">АИ98</option>
                </select>
            </label><br>
            <label>Расход топлива (л/100 км)<br>
                <select name="rashod" class="options">
                    <option value="0" selected></option>
                    <option value="0">до 5</option>
                    <option value="2">5 - 7</option>
                    <option value="6">8 - 10</option>
                    <option value="7">11 - 15</option>
                    <option value="8">16 - 20</option>
                    <option value="9">21 - 25</option>
                    <option value="10">более 25</option>
                </select>
            </label><br>
            <label>Год выпуска<br>
                <select name="year" class="options">
                    <option value="0" selected></option>
                    <option value="1">до 1991</option>
                    <option value="2">1991 - 1995</option>
                    <option value="3">1996 - 2000</option>
                    <option value="1">2001 - 2005</option>
                    <option value="0">после 2005</option>
                </select>
            </label><br>
            <label>Иномарка/Отечественный<br>
                <select name="land" class="options">
                    <option value="0" selected></option>
                    <option value="0">Иномарка</option>
                    <option value="3">Отечественный</option>
                </select>
            </label><br><br>
            <input type="button" value="Расчитать" class="buttons" onclick="go_test(); return false;">
        </form>

Скрипт обработки
Код

    <script>
        function go_test(){
        var form_my = document.forms.test_gas;
        var sum = 0;
        for (i=0; i<form_my.length; i++){
            sum = sum + parseInt(form_my.elements[i].value);
        }
        if (sum >= 20){
            document.getElementById("answer").innerHTML="Скорее на установку!"+sum;}
        else if((sum >= 15) && (sum <= 19)){
            document.getElementById("answer").innerHTML="Вам это выгодно!"+sum;}
        else{
            document.getElementById("answer").innerHTML="Окупится не скоро!"+sum;}
    }</script>

какие бы значения не выбирались, всегда будет срабатывать последний вариант.  smile 

Автор: Nett 1.9.2013, 17:39
А Вы дебажить пробовали? Что происходит в цикле for? Что в результате в переменной sum?

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//Подсчет-значений-id52230b37ae2015910c8b4567#findElement_E7045_522351a3ae2015416b2bf7d0_0

Автор: Amphiluke 1.9.2013, 20:34
Цитата (s1lver @  1.9.2013,  16:36 findReferencedText)

   for (i=0; i<form_my.length; i++){
   

Если вы суммируете в цикле по всем элементам формы, стоит учесть, что кнопка тоже, между прочим, является элементом формы. И у нее тоже есть свойство value, значение которого, однако, не преобразуется к числу, что дает в итоге NaN. Правильнее будет либо задать какой-нибудь класс тем полям формы, которые участвуют в расчете, и выборку полей делать по этому классу, либо в вашем цикле отсекать незначимые элементы формы по их типу.

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//Подсчет-значений-id52230b37ae2015910c8b4567#findElement_E7045_52237a9bae20156f412be4c1_0

Автор: ksnk 1.9.2013, 21:43
Кстати, у select'а отмеченное юзером значение вычисляется не очень тривиально. Что-то вроде этого.
Код

for (i=0; i<form_my.length; i++){
      var el=form_my.elements[i];
      if(el.tagName && el.tagName.toLowerCase()=='select') {
            sum = sum + el.options[el.selectedIndex].value; 
      } else
           sum = sum + parseInt(form_my.elements[i].value);
}
var sel = document.getElementById("fruits"); // Получаем наш список
var val = sel.options[sel.selectedIndex].value; // Получаем значение выделенного элемента (в нашем случае fr

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)