Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема с получением значений из Textfield
 
 автор: VitGun   (27.06.2006 в 11:00)   письмо автору
 
 

Использую 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".

Что я делаю неправильно?
гугль юзал, форумы читал, но так и не нашел ответа....

   
 
 автор: RMW   (27.06.2006 в 17:55)   письмо автору
 
   для: 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>

   
 
 автор: VitGun   (27.06.2006 в 18:39)   письмо автору
 
   для: 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

   
 
 автор: RMW   (27.06.2006 в 19:47)   письмо автору
 
   для: 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.

   
 
 автор: VitGun   (27.06.2006 в 20:42)   письмо автору
 
   для: 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 или не является объектом

   
 
 автор: RMW   (27.06.2006 в 20:58)   письмо автору
 
   для: 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>

   
 
 автор: VitGun   (27.06.2006 в 22:14)   письмо автору
 
   для: RMW   (27.06.2006 в 20:58)
 

Отлично! Все работает!!! Загвоздка была в том, что summ,kol,price - это были ассоциативные массивы...когда в имени textfield'a убрал [] - все заработало!! Спасибо огромное!!!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования