Помогите найти где кроется ошибка.
Вложений: 1
В скрипте выполняется суммирование количества товаров по количеству и приводится все к одной сумме, но во незадача если первый раз считает, то второй после сброса он начинает не правильно выдавать итоговую сумму. Помогите в этом деле, где ошибка в скрипте?
<html> <head> <title>site</title> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <script language="JavaScript"> function tovar(nom,descrip,money) { nazv[nom] = descrip; cost[nom] = money; } function writeTable() { num=4; /* num - количество строк для заказа товара */ len=4; /* len - количество предлагаемых товаров в раскрывающемся списке (в столбце Наименование) */ max=4; /* max - максимально допустимое количество единиц заказываемого товара (в столбце Количество) */ nazv = new Array(len); cost = new Array(len); tovar(0,'продукт1',12441000); /* Перечень товаров и цен. Число товаров в перечне должно соответствовать константе len! */ tovar(1,'продукт2',3784500); tovar(2,'продукт3',3436500); tovar(3,'продукт4',6960000); sum = new Array(num); for (j=0; j<num; j++) sum[j]=0; document.write('<table width="70%" border="1" cellspacing="0" cellpadding="0"><tr>'); document.write('<td height="45" width="4%"><div align="center"><font face="Georgia">№</font></div></td>'); document.write('<td height="45" width="32%"><div align="center"><font face="Georgia">Наименование</font></div></td>'); document.write('<td height="45" width="19%"><div align="center"><font face="Georgia">Количество</font></div></td>'); document.write('<td height="45" width="18%"><div align="center"><font face="Georgia">Сумма</font></div></td>'); document.write('<td height="'+ (34*num+45) +'" valign="middle" rowspan="'+ (num+1) +'" width="27%"><div align="center"><form name="form1" method="post" action="">' +'<input type="text" name="all" class="colortext" size=12 maxlength=12 value="0" readonly>' +'<br><br><input type="reset" value="Сброс"><br></div></td></tr>'); for (i=0; i<num; i++) writeTableRow(i); document.write('</table>'); } function writeTableRow(i) { document.write('<tr><td height="34" width="4%"><div align="center"><font face="Georgia">'+ (i+1) +'</font></div></td>'); document.write('<td height="34" width="32%"><div align="center"><select name="name'+ i +'" onChange="update('+ i +')">'); for (j=0; j<len; j++) document.write('<option value="'+ j +'">'+ nazv[j] +' - '+ cost[j] +' руб.</option>'); document.write('</select></font></div></td>'); document.write('<td height="34" width="19%">'); for (j=0; j<max;j++) document.write('<p><input type="radio" name="radiobutton'+ i +'" value="'+ (j+1) +'" onClick="update('+ i +')"> '+ (j+1) +'</p>'); document.write('</td><td height="34" width="18%"><div align="center"><font face="Georgia"> ' + '<input class="colortext" type="text" name="total'+ i +'" size=12 maxlength=12 value="0" readonly>'); document.write('</font></div></td></tr>'); } function update(i) { eval('for (var k=0; k<max; k++) { if (document.form1.radiobutton'+ i +'[k].checked) { break } } kol = document.form1.radiobutton'+ i +'[k].value;'); eval('sum[i] = kol * cost[document.form1.name'+ i +'.selectedIndex];'); eval('document.form1.total'+ i +'.value = sum[i];'); var x=0; summa=0; for (j=0; j<num; j++) { x=summa; summa=x+sum[j]; } document.form1.all.value = summa; } </script> </head> <body> <script language="JavaScript"> writeTable(); </script> </body> </html> Вложение 1682 |
Цитата:
|
Где вы взяли этот скрипт? На какой помойке откопали? Выкиньте его обратно.
|
Цитата:
Или может подскажите скрип такого же действия? |
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
Кто нибудь скажет по делу что нужно изменить или покажет альтернативу этому коду? |
Цитата:
|
Вложений: 2
Цитата:
В общем есть список товаров с ценами, который задается в виде формы ну или списка, в которой мы можем выбрать количество (штук) выбранного товара и в итоге подсчитывается общая сумма выбранных товаров и их количества. Ну а если так написать, то мне нужен скрипт который показывает список товаров с ценами, и позволяет выбирать несколько товаров и их количество, и в итоге он подсчитывает общую сумму выбранных товаров. Примерно как на фото ![]() ну или HTML файлик или txt Вложение 1684 Вложение 1685 |
<table border="1"> <tr> <td> <select name="product[]"> <option value="1" data-price="100">Продукт 1</option> <option value="2" data-price="500">Продукт 1</option> </select> </td> <td> <input name="quantity[]" /> </td> <td> <input name="total[]" readonly="" /> </td> </tr> <tr> <td> <select name="product[]"> <option value="1" data-price="100">Продукт 1</option> <option value="2" data-price="500">Продукт 1</option> </select> </td> <td> <input name="quantity[]" /> </td> <td> <input name="total[]" readonly="" /> </td> </tr> <tfoot> <tr> <td>Итого:</td> <td><input name="total" readonly="" /></td> </tr> </tfoot> </table> <script> (function(){ var selects = document.getElementsByName('product[]'), inputs = document.getElementsByName('quantity[]'), outputs = document.getElementsByName('total[]'), output = document.getElementsByName('total')[0]; for (var i = 0; i < selects.length; i++) { selects[i].onchange = inputs[i].oninput = handleChange.bind(i); } function handleChange() { var price = selects[this].selectedOptions[0].dataset.price; var count = +inputs[this].value || 0; outputs[this].value = price * count; var total = 0; for (var i = 0; i < outputs.length; i++) { total += +outputs[i].value; } output.value = total; } })(); </script> Не будет работать в старых браузерах. Но это можно поправить в принципе. |
Спасибо за скрип, выручил вовремя:) :dance:
Пошел адаптировать таблицу под свои нужды :write: P.S.:только в Firefox не работает подсчет, но это уже чисто так, мне главное что в хроме и в опере работает) |
Часовой пояс GMT +3, время: 10:58. |