Показать сообщение отдельно
  #1 (permalink)  
Старый 10.04.2012, 02:30
Новичок на форуме
Отправить личное сообщение для vasiliy_shkolniy Посмотреть профиль Найти все сообщения от vasiliy_shkolniy
 
Регистрация: 10.04.2012
Сообщений: 8

Подсчёт суммы значений выбранных radio
Нашёл себе почти подходящий скрипт. После моей правки формы, скрипт просто подсчитывает сумму значений выбранных радиокнопок.
Проблема: в сумме <span id='total_sum'> считаются все значения тегов <bdo>. Мне нужно несколько сумм определённых <bdo> в одной форме (чтобы было понятнее, закомментировал желаемое в html-коде формы)
Помогите пожалуйста, если не сложная задача.

<script type='text/javascript'>
     /*
     * Входные параметры функции:
     *    quant     - количество товара
     *    prise     - стоимость за единицу
     *    updElemId - идентификатор элемента, в котором требуется обновить данные (по конкретному товару)
     **/
     function calculate(quant, prise, updElemId){
             // данное регулярное выражение проверяет, является ли введенное значение числом
             // учтите, что дробное число тоже является корректным!!! (ведь можно же продавать по полторы тонны чего-либо?)
         var anum = /(^\d+$)|(^\d+\.\d+$)/;
         if (!anum.test(quant)) {
             // если данные не валидны - выводим предупреждение и прерываем выполнение функции
             alert('Введенное значение не является числом!');
             return;
         }
             // сумма по наименованию = количество * цену
         goodSum = quant * prise;
             // обновляем элемент - выводим в нем полученную сумму
             // если непонятно: вместо параметра применяемой функции - updElemId
             // у нас подставляется ID конкретного элемента страницы, с которым эта функция была вызвана.
             // Про innerHTML можете самостоятельно поискать в сети - информации море
         document.getElementById(updElemId).innerHTML = goodSum;
             // "вытаскиваем" все, что есть внутри нашей формы с id = 'me_order_form'
         var meForm   = document.getElementById('me_order_form');
             // затем как бы фильтруем эти данные - берем только то, что в контейнерах <bdo></bdo>
         var bdoArray  = meForm.getElementsByTagName('bdo');
             // устанавливаем начальное нулевое значение ОБЩЕЙ суммы
         var allSumm = 0;
             // и в цикле прибавляем к ней сумму каждого товара
         for (j = 0; j < bdoArray.length; j++) {
                 // функция parseFloat преобразует данные в число с плавающей запятой
                 // без этого сумма не считалась бы, а использовалась КОНКАТЕНАЦИЯ -
                 // то есть 100 и 200 будет не 300 (как нужно нам), а 100200 - что нам совсем не нужно :)
             allSumm = allSumm + parseFloat(bdoArray[j].innerHTML);
         }
             // и обновляем содержимое контейнера с id = total_sum
         document.getElementById('total_sum').innerHTML = allSumm;

     }
 </script>

<form id='me_order_form'>
	  <table>
             <tr><td colspan='2'>ОВОЩИ</td></tr>
             <tr>
<td>огурец</td><td><input type='radio' value='1' id='inp_1' name = "check" onclick='calculate(this.value, "5", "bdo_1")'></td>
<td>помидор</td><td><input type='radio' value='1' id='inp_1' name = "check" onclick='calculate(this.value, "8", "bdo_1")'  ></td>
<td>тыква</td><td><input type='radio' value='1' id='inp_1' name = "check" onclick='calculate(this.value, "4", "bdo_1")'  ></td>
<td><bdo dir='ltr' id='bdo_1'>0</bdo> руб.</td>
			</tr>

<tr><td colspan='2'>АЛКОГОЛЬ</td></tr>
			<tr>
<td>вино</td><td><input type='radio' value='1' id='inp_2' name = "check2" onclick='calculate(this.value, "50", "bdo_2")'></td>
<td>водка</td><td><input type='radio' value='1' id='inp_2' name = "check2" onclick='calculate(this.value, "30", "bdo_2")'  ></td>
<td>коньяк</td><td><input type='radio' value='1' id='inp_2' name = "check2" onclick='calculate(this.value, "70", "bdo_2")'  ></td>
<td><bdo dir='ltr' id='bdo_2'>0</bdo> руб.</td>
			</tr>
<!--
<tr><td colspan='2'>МЯСНЫЕ ПРОДУКТЫ</td></tr>
			<tr>
<td>Сосиски</td><td><input type='radio' value='1' id='inp_3' name = "check3" onclick='calculate(this.value, "68", "bdo_3")'></td>
<td>Колбаса</td><td><input type='radio' value='1' id='inp_3' name = "check3" onclick='calculate(this.value, "96", "bdo_3")'  ></td>
<td>Сордельки</td><td><input type='radio' value='1' id='inp_3' name = "check3" onclick='calculate(this.value, "60", "bdo_3")'  ></td>
<td><bdo dir='ltr' id='bdo_3'>0</bdo> руб.</td>
			</tr>

<tr><td colspan='2'>ФРУКТЫ</td></tr>
			<tr>
<td>Банан</td><td><input type='radio' value='1' id='inp_4' name = "check4" onclick='calculate(this.value, "17", "bdo_4")'></td>
<td>Яблоко</td><td><input type='radio' value='1' id='inp_4' name = "check4" onclick='calculate(this.value, "10", "bdo_4")'  ></td>
<td>Киви</td><td><input type='radio' value='1' id='inp_4' name = "check4" onclick='calculate(this.value, "25", "bdo_4")'  ></td>
<td><bdo dir='ltr' id='bdo_4'>0</bdo> руб.</td>
			</tr>
-->
			
    <tr><td>Сумма овощей и спиртного: </td><td><span id='total_sum'>0</span> рублей</td></tr>
<!-- <tr><td>Сумма ФРУКТОВ и МЯСНОГО: </td><td><span id='total_sum'>0</span> рублей</td></tr> -->
         <table>
		 
		 </form>


Если что, скрипт отсюда

Последний раз редактировалось vasiliy_shkolniy, 10.04.2012 в 02:39.
Ответить с цитированием