Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Помогите найти где кроется ошибка. (https://javascript.ru/forum/project/36847-pomogite-najjti-gde-kroetsya-oshibka.html)

Kylak 29.03.2013 11:19

Помогите найти где кроется ошибка.
 
Вложений: 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

Kylak 29.03.2013 20:13

Цитата:

Сообщение от nasqad (Сообщение 243260)

Очень содержательно, учитываю что с JS не работаю, это не по моему направлению, но вот пришлось использовать скрипт и он не функционирует положенным образом.

danik.js 29.03.2013 20:48

Где вы взяли этот скрипт? На какой помойке откопали? Выкиньте его обратно.

Kylak 29.03.2013 22:33

Цитата:

Сообщение от danik.js (Сообщение 243353)
Где вы взяли этот скрипт? На какой помойке откопали? Выкиньте его обратно.

Я так и предполагал, но мне нужно сдать преподу сайт с эти скриптом, если было просто сверстать ну или хотя бы на PHP сделать то без проблем, а так приходиться работать с тем что имею.
Или может подскажите скрип такого же действия?

danik.js 29.03.2013 22:45

Цитата:

Сообщение от Kylak
windows-1251

Цитата:

Сообщение от Kylak
language="JavaScript"

Цитата:

Сообщение от Kylak
document.write

Цитата:

Сообщение от Kylak
eval

Цитата:

Сообщение от Kylak
<font face="Georgia">

А так же: глобальные переменные, отсутствие доктайпа, именование транслитом и все это в одном скрипте. Я такого густого и смердящего говнокода никогда не видел ))

Kylak 30.03.2013 01:27

Цитата:

Сообщение от danik.js (Сообщение 243377)
А так же: глобальные переменные, отсутствие доктайпа, именование транслитом и все это в одном скрипте. Я такого густого и смердящего говнокода никогда не видел ))

Еще раз говорю я этот код не составлял и не имею понятие что в себе скрывает код JS, это не мое направление.
Кто нибудь скажет по делу что нужно изменить или покажет альтернативу этому коду?

danik.js 30.03.2013 06:41

Цитата:

Сообщение от Kylak
покажет альтернативу этому коду

А что делает этот код?

Kylak 30.03.2013 17:07

Вложений: 2
Цитата:

Сообщение от danik.js (Сообщение 243409)
А что делает этот код?

А открыть и посмотреть нельзя? Описывать как то не так получиться.
В общем есть список товаров с ценами, который задается в виде формы ну или списка, в которой мы можем выбрать количество (штук) выбранного товара и в итоге подсчитывается общая сумма выбранных товаров и их количества.

Ну а если так написать, то мне нужен скрипт который показывает список товаров с ценами, и позволяет выбирать несколько товаров и их количество, и в итоге он подсчитывает общую сумму выбранных товаров.

Примерно как на фото


ну или HTML файлик или txt
Вложение 1684
Вложение 1685

danik.js 31.03.2013 07:27

<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>


Не будет работать в старых браузерах. Но это можно поправить в принципе.

Kylak 31.03.2013 14:29

Спасибо за скрип, выручил вовремя:) :dance:
Пошел адаптировать таблицу под свои нужды :write:
P.S.:только в Firefox не работает подсчет, но это уже чисто так, мне главное что в хроме и в опере работает)


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