Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.03.2013, 11:19
Новичок на форуме
Отправить личное сообщение для Kylak Посмотреть профиль Найти все сообщения от Kylak
 
Регистрация: 29.03.2013
Сообщений: 6

Помогите найти где кроется ошибка.
В скрипте выполняется суммирование количества товаров по количеству и приводится все к одной сумме, но во незадача если первый раз считает, то второй после сброса он начинает не правильно выдавать итоговую сумму. Помогите в этом деле, где ошибка в скрипте?


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


122.zip
Ответить с цитированием
  #2 (permalink)  
Старый 29.03.2013, 20:13
Новичок на форуме
Отправить личное сообщение для Kylak Посмотреть профиль Найти все сообщения от Kylak
 
Регистрация: 29.03.2013
Сообщений: 6

Сообщение от nasqad Посмотреть сообщение
Очень содержательно, учитываю что с JS не работаю, это не по моему направлению, но вот пришлось использовать скрипт и он не функционирует положенным образом.
Ответить с цитированием
  #3 (permalink)  
Старый 29.03.2013, 20:48
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Где вы взяли этот скрипт? На какой помойке откопали? Выкиньте его обратно.
Ответить с цитированием
  #4 (permalink)  
Старый 29.03.2013, 22:33
Новичок на форуме
Отправить личное сообщение для Kylak Посмотреть профиль Найти все сообщения от Kylak
 
Регистрация: 29.03.2013
Сообщений: 6

Сообщение от danik.js Посмотреть сообщение
Где вы взяли этот скрипт? На какой помойке откопали? Выкиньте его обратно.
Я так и предполагал, но мне нужно сдать преподу сайт с эти скриптом, если было просто сверстать ну или хотя бы на PHP сделать то без проблем, а так приходиться работать с тем что имею.
Или может подскажите скрип такого же действия?
Ответить с цитированием
  #5 (permalink)  
Старый 29.03.2013, 22:45
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Kylak
windows-1251
Сообщение от Kylak
language="JavaScript"
Сообщение от Kylak
document.write
Сообщение от Kylak
eval
Сообщение от Kylak
<font face="Georgia">
А так же: глобальные переменные, отсутствие доктайпа, именование транслитом и все это в одном скрипте. Я такого густого и смердящего говнокода никогда не видел ))
Ответить с цитированием
  #6 (permalink)  
Старый 30.03.2013, 01:27
Новичок на форуме
Отправить личное сообщение для Kylak Посмотреть профиль Найти все сообщения от Kylak
 
Регистрация: 29.03.2013
Сообщений: 6

Сообщение от danik.js Посмотреть сообщение
А так же: глобальные переменные, отсутствие доктайпа, именование транслитом и все это в одном скрипте. Я такого густого и смердящего говнокода никогда не видел ))
Еще раз говорю я этот код не составлял и не имею понятие что в себе скрывает код JS, это не мое направление.
Кто нибудь скажет по делу что нужно изменить или покажет альтернативу этому коду?
Ответить с цитированием
  #7 (permalink)  
Старый 30.03.2013, 06:41
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Kylak
покажет альтернативу этому коду
А что делает этот код?
Ответить с цитированием
  #8 (permalink)  
Старый 30.03.2013, 17:07
Новичок на форуме
Отправить личное сообщение для Kylak Посмотреть профиль Найти все сообщения от Kylak
 
Регистрация: 29.03.2013
Сообщений: 6

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

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

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


ну или HTML файлик или txt
index.txt
213.zip
Ответить с цитированием
  #9 (permalink)  
Старый 31.03.2013, 07:27
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

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


Не будет работать в старых браузерах. Но это можно поправить в принципе.
Ответить с цитированием
  #10 (permalink)  
Старый 31.03.2013, 14:29
Новичок на форуме
Отправить личное сообщение для Kylak Посмотреть профиль Найти все сообщения от Kylak
 
Регистрация: 29.03.2013
Сообщений: 6

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите найти в чем ошибка Pashok Элементы интерфейса 6 26.02.2013 20:20
Помогите найти скрипт Demoni Общие вопросы Javascript 6 30.08.2011 13:12
Помогите найти параметр в скрипте! laised Элементы интерфейса 0 01.02.2011 02:03
Помогите найти ошибку((( hacker_007 Общие вопросы Javascript 5 28.01.2011 17:37
Помогите книгу найти по jQuery micscr Оффтопик 4 14.11.2009 00:42