Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подсчет значений 
V
    Опции темы
s1lver
Дата 1.9.2013, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 580
Регистрация: 14.12.2007
Где: Россия

Репутация: нет
Всего: нет



Доброго времени суток!

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

        <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 

Это сообщение отредактировал(а) s1lver - 1.9.2013, 12:36


--------------------
Я собрался жить вечно - пока все идет нормально!
PM MAIL ICQ   Вверх
Nett
Дата 1.9.2013, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 20.5.2008

Репутация: нет
Всего: 1



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

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL WWW   Вверх
Amphiluke
Дата 1.9.2013, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 39
Всего: 112



Цитата (s1lver @  1.9.2013,  16:36 findReferencedText)

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

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

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM   Вверх
ksnk
Дата 1.9.2013, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Кстати, у 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



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0672 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.