Добрый день. Есть веб форма для заказа товаров. Цель подсчитать итоговую сумму при формировании заказа. Это скрипт формирования каталога из файла csv и подсчета сумм в строках при вводе количества: Код (Text): <?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); ?> Это функция подсчета итоговой суммы: Код (Text): <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>
всё верно. её объявление есть во втором листинге а попытка использования - в первом. а как эти листинги связаны?
функция sum() объявляется в head документа, затем с помощью инклюда и функцией php из первого листинга формируется body страницы с каталогом товаров, где при изменении количества в каждой строчке подсчитывается сумма с помощью функции из первого листинга: Код (Text): <script> function f'.$G.'(){ var n1=document.getElementById("i'.$G.'1").value; var n2=document.getElementById("i'.$G.'2").value; var n3=document.getElementById("i'.$G.'3").value; document.getElementById("i'.$G.'4").value=Number(n1)*Number(n2)*Number(n3); alert($G); sum(); } </script> при вычислении суммы в стоке вызывается функция sum() для обновления итоговой суммы по всему заказу.
Тему закройте, неправильно передаю переменную из PHP в JS... Перепишу функцию sum() и будет все норм. Добавлено спустя 35 минут 44 секунды: Сделал так: Код (Text): <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>