Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Подсчет суммы значений в импутах по id элементов (https://javascript.ru/forum/misc/52252-podschet-summy-znachenijj-v-imputakh-po-id-ehlementov.html)

qux 10.12.2014 10:30

Подсчет суммы значений в импутах по id элементов
 
Добрый день. Есть веб форма для заказа товаров. Цель подсчитать итоговую сумму при формировании заказа.

Это скрипт формирования каталога из файла csv и подсчета сумм в строках при вводе количества:

Код:

    <?PHP
    $G=0;
    $fileZakaz = fopen ("images/catalog/zakaz.csv","r");
    while ($data = fgetcsv ($fileZakaz, 1000, ";"))
        {$G++;
          if ($data[0]=='head'){
          echo '<tr align="center" height="30px">';
          echo '<td colspan="5" class="zakazgroup">'.$data[1].'</td>';
          echo '</tr>';
          echo '<tr align="center" height="30px">';
            echo '<td width="40%" class="zakazhead">Наименование</td>';
            echo '<td width="15%" class="zakazhead">Заказ количество</td>';
            echo '<td width="15%" class="zakazhead">В упаковке</td>';
            echo '<td width="15%" class="zakazhead">Цена шт.</td>';
            echo '<td width="15%" class="zakazhead">Сумма</td>';
            echo '</tr>';
          }
          else {
          echo '<tr align="center" valign="middle" height="40px">';
          echo '<td width="40%" align="left" class="zakazrowname">'.$data[1].'</td>';
          echo '<td width="15%" class="zakazrow"><input onChange=f'.$G.'() id=i'.$G.'1 type="text" size="2" maxlength="3" class="zakaz"></td>';
          echo '<td width="15%" class="zakazrow"><input disabled id=i'.$G.'2 value='.$data[2].' type="text" size="2" maxlength="3" class="zakazdis"></td>';
          echo '<td width="15%" class="zakazrow"><input disabled id=i'.$G.'3 value='.$data[3].' type="text" size="3" maxlength="3" class="zakazdis"></td>';
          echo '<td width="15%" class="zakazrow"><input disabled id=i'.$G.'4 type="text" size="3" maxlength="3" class="zakazdis"></td>';
            echo '</tr>';
          echo '<script>';
          echo 'function f'.$G.'(){';
          echo 'var n1=document.getElementById("i'.$G.'1").value;';
          echo 'var n2=document.getElementById("i'.$G.'2").value;';
          echo 'var n3=document.getElementById("i'.$G.'3").value;';
          echo 'document.getElementById("i'.$G.'4").value=Number(n1)*Number(n2)*Number(n3);';
          echo 'alert($G);';
          echo 'sum();';
          echo '}';
          echo '</script>';
          }
      }
      fclose ($fileZakaz);
    ?>

Это функция подсчета итоговой суммы:

Код:

    <tr align="center" height="40px">
                <td colspan="4" class="zakazgroup" align="right" style="padding-right:10px">Заказ на сумму</td>
                <td width="15%" class="zakazgroup"><input disabled id=S1 type="text" size="3" maxlength="3" class="zakazdis"></td>
              <script>
          function sum(){
          $num=1;
          $sum=0;
          alert($G);
            while ($num <= $G) {
          var n4=document.getElementById(i.$G.4).value;
          alert(n4);
          $sum+=Number(n4);   
          alert($sum);
          $num++;
            }
          document.getElementById(S1).value=$sum;}
          </script>
              </tr>

При отладке выходит ошибка " Uncaught ReferenceError: sum is not defined"

Почему не видна функция sum() ?

qux 10.12.2014 14:35

Тему закройте, неправильно передаю переменную из PHP в JS... Перепишу функцию sum() и будет все норм.

jsnb 10.12.2014 15:11

Омг, юзай шаблонизацию. Эти echo это же ужас.

qux 10.12.2014 15:12

Сделал так:

<script>
          function sum(){
          var sum=0;
          var elems = document.getElementsByName('itog');
           for (var i=0; i<elems.length; i++){
          var n4 = elems[i].value;
          sum+=Number(n4);
          }
          document.getElementById('S1').value=sum;
          }
          </script>

qux 10.12.2014 15:12

jsnb,
Шаблонизаторы? Дайте, плиз, наводку где почитать?

jsnb 10.12.2014 15:15

Цитата:

Сообщение от qux
jsnb,
Шаблонизаторы? Дайте, плиз, наводку где почитать?

А гугл на что?


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