|
|
|
| Использую PHP+MySQL. Генерирую таблицу заказа товара. Т.е. колонки "Наименование, "КолВо","Цена","Сумма". Возникла необходимость при изменении количества пересчитывать сумму. Это конечно можно было бы сделать перегрузив страницу, но хочется обойтись без этого. Ясное дело, что PHP тут не обойтись, посему попробовал решить вопрос при помощи JS. Написал я вот такую функцию:
<script language="JavaScript">
<!--
function summ() {
for (i=0; i<document.form1.length; i++) {
if (!is_null(parseInt(document.form1.elements[i])))
{
document.form1.summ[i].value = document.form1.kol[i]*document.form1.price[i];
}
}
} //-->
</script>
|
summ - это массив TextField'ов куда выводятся сумма
kol - это массив TextField'ов куда выводятся количество товара
price - это массив TextField'ов куда выводятся цена за единицу товара
строки таблицы генерируются так:
echo '<td><input name="kol[]" type="text" size="15" value="1" onchange="summ()"></td>';
echo '<td><input name="price[]" type="text" size="17" value="'.$pricerow["PRICE"].'" onchange="summ()"></td>';
echo '<td><input name="summ[]" type="text" size="17" readonly="readonly" value="'.$pricerow["PRICE"].'" onchange="summ()"></td>';
|
При попытке изменить количество IE мне выдает: "Object expected".
Что я делаю неправильно?
гугль юзал, форумы читал, но так и не нашел ответа.... | |
|
|
|
|
|
|
|
для: VitGun
(27.06.2006 в 11:00)
| | Ну, если имеется чёткая структура,
то как вариант:
<html>
<head>
<script language="JavaScript">
<!--
function summa() {
for (i=0; i<document.form1.length; i+=3) {
if(document.form1[i+2]){
document.form1[i+2].value=document.form1[i+1].value*document.form1[i].value;
}
}
} //-->
</script>
</head>
<body>
<form name="form1">
кол-во:<br>
<input type="text" name="kol" onchange="summa()"><br>
цена :<br>
<input type="text" name="price" onchange="summa()"><br>
сумма :<br>
<input type="text" name="summ" readonly><br>
<hr>
кол-во:<br>
<input type="text" name="kol" onchange="summa()"><br>
цена :<br>
<input type="text" name="price" onchange="summa()"><br>
сумма :<br>
<input type="text" name="summ" readonly><br>
</form>
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: RMW
(27.06.2006 в 17:55)
| | Такой код почти работает. Проблема вся в том, что у меня таблица такая:
Наименование Кол-во Цена Сумма
Товар1 1 100 100
Товар2 2 100 200
Товар3 3 100 300
Товар4 4 100 400
Товар5 5 100 500
Товар6 6 100 600
т.е. код приведенный выше работает только для первой строки. В строках ниже в произвольном порядке ставиться "NaN"...
Все поля таблицы - textfield | |
|
|
|
|
|
|
|
для: VitGun
(27.06.2006 в 18:39)
| | Гоняйте цикл по массивам kol,price,summ.
Как раньше, но только кол-во итераций цикла
должно быть равно длине любого из массивов,
а не кол-ву всех элементов input.
for(var i=0;i<document.form1.summ.length;i++){
document.form1.summ[i]=document.form1.col[i]*document.form1.price[i];
}
Если будет всего одна группа (как я понял из четырёх полей),
то kol,price,summ не будут являться массивами.
Это тоже имейте ввиду.
Имя функции нужно взять другое, не summ. | |
|
|
|
|
|
|
|
для: RMW
(27.06.2006 в 19:47)
| | к сожалению это тоже не работает. Текст функции:
function summa()
{
for(var i=1;i<document.form1.summ.length;i++)
{
document.form1.summ[i].value=document.form1.kol[i].value*document.form1.price[i].value;
}
}
|
Смотрел через консоль javascript в FireFox. Выдает:
Error: document.form1.summ has no properties
Line: 6
IE говорит следующее:
"document.form1.summ" - есть null или не является объектом | |
|
|
|
|
|
|
|
для: VitGun
(27.06.2006 в 20:42)
| | А почему i=1?
Вот полная картина на всякий случай.
<html>
<head>
<script language="JavaScript">
<!--
function summa() {
for (i=0; i<document.form1.naimenovanie.length; i++) {
document.form1.summ[i].value=document.form1.kol[i].value*document.form1.price[i].value;
}
} //-->
</script>
</head>
<body>
<form name="form1">
наименование:<br>
<input type="text" name="naimenovanie"><br>
кол-во:<br>
<input type="text" name="kol" onchange="summa()"><br>
цена :<br>
<input type="text" name="price" onchange="summa()"><br>
сумма :<br>
<input type="text" name="summ" readonly><br>
<hr>
наименование:<br>
<input type="text" name="naimenovanie"><br>
кол-во:<br>
<input type="text" name="kol" onchange="summa()"><br>
цена :<br>
<input type="text" name="price" onchange="summa()"><br>
сумма :<br>
<input type="text" name="summ" readonly><br>
</form>
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: RMW
(27.06.2006 в 20:58)
| | Отлично! Все работает!!! Загвоздка была в том, что summ,kol,price - это были ассоциативные массивы...когда в имени textfield'a убрал [] - все заработало!! Спасибо огромное!!! | |
|
|
|