Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Суммирование значений в текстовом поле.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
DeMonyan
Отправлено: 07 Ноября, 2011 - 15:05:17
Post Id



Новичок


Покинул форум
Сообщений всего: 43
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




Есть динамическая форма вписанная в таблицу. В форме может быть от 20 до ~250 текстовых полей. Ввод данных разрешён только в поля находящиеся в первом столбце таблицы, у остальных атрибут ридонли.

При вводе числового значения в поле поля находящиеся с ним в одной строке заполняются вычисляемыми значениями. Это сделал сам.

Но как при изменении одного из полей в первом столбце, выводить в поля последней строки сумму полей по столбцам? Со строками всё просто, там всегда одинаковое количество полей, а в столбце то может быть разное количество. Помогите кто знает, пожалуйста...
 
 Top
filkeith
Отправлено: 07 Ноября, 2011 - 15:13:36
Post Id



Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Июль 2011  


Помог: 2 раз(а)




В какой то переменной всё же будет количество строк записано? Потом циклом пробежать строки по значению этой переменной и суммировать их.
Как то так, в голове всё чётко представил, а как словами написать.
 
 Top
DeMonyan
Отправлено: 07 Ноября, 2011 - 15:19:34
Post Id



Новичок


Покинул форум
Сообщений всего: 43
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




filkeith пишет:
В какой то переменной всё же будет количество строк записано? Потом циклом пробежать строки по значению этой переменной и суммировать их.
Как то так, в голове всё чётко представил, а как словами написать.


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

UPD:
Хотя есть идея... В каждой строке имя полей имеет вид: имя1,имя1...имя7. Можно брать эти цифры, но мои познания джаваскриптов не так сильны, как хотелось бы...

(Отредактировано автором: 07 Ноября, 2011 - 15:27:15)

 
 Top
filkeith
Отправлено: 07 Ноября, 2011 - 21:36:57
Post Id



Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Июль 2011  


Помог: 2 раз(а)




сам в js так себе, ну например у каждого поля будет id'шник, т.е. <input... ...id="string1"> и т.д. <input... ...id="stringN">
что бы посчитать сколько таких строк, вроде должна сработать
CODE (javascript):
скопировать код в буфер обмена
  1. for (var i=0;i<document.getElementsByTagName("input").lengt h;i++)
  2. {
  3. summ=document.getElementsById("string"+i);
  4. i++;
  5. }

то что написал, не проверял на работоспособность, это, что в голову пришло
 
 Top
sKaa
Отправлено: 07 Ноября, 2011 - 22:02:02
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


хоть убейте я не понял суть вопроса...
если вам надо подсчитать кол-во инпутов на странице или же что-то сделать с определенным рекомендую jQuery :
CODE (javascript):
скопировать код в буфер обмена
  1. var s = $('input').size(); // Общее кол-во инпутов на странице.
  2. for(k=0;k<s;k++){
  3.   var input = $('input').get(k); // инпут под номером n
  4. }
  5.  
 
 Top
filkeith
Отправлено: 08 Ноября, 2011 - 06:49:36
Post Id



Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Июль 2011  


Помог: 2 раз(а)




sKaa пишет:
хоть убейте я не понял суть вопроса...
если вам надо подсчитать кол-во инпутов на странице или же что-то сделать с определенным рекомендую jQuery :
CODE (javascript):
скопировать код в буфер обмена
  1. var s = $('input').size(); // Общее кол-во инпутов на странице.
  2. for(k=0;k<s;k++){
  3.   var input = $('input').get(k); // инпут под номером n
  4. }
  5.  


ему надо сложить значения которые вводятся в инпут, просто проблема в том что инпутов может быть разное количество, поэтому я и предложил посчитать кол-во инпутов и в цикле потом пробежать по ним всем, дёргая из них значения
 
 Top
DeepVarvar Супермодератор
Отправлено: 08 Ноября, 2011 - 07:12:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




filkeith пишет:
size()

Спойлер (Отобразить)

http://api[dot]jquery[dot]com/size/
Use length, Luke..
 
 Top
SAD
Отправлено: 08 Ноября, 2011 - 08:59:01
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




CODE (javascript):
скопировать код в буфер обмена
  1. var sum = 0;
  2. $('input.firstInput').each(function() {
  3.     sum += parseFloat($(this).val()) || 0;
  4. });
  5. $('input:last').val(sum)
 
 Top
DeMonyan
Отправлено: 08 Ноября, 2011 - 11:58:33
Post Id



Новичок


Покинул форум
Сообщений всего: 43
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




filkeith пишет:
сам в js так себе, ну например у каждого поля будет id'шник, т.е. <input... ...id="string1"> и т.д. <input... ...id="stringN">
что бы посчитать сколько таких строк, вроде должна сработать
CODE (javascript):
скопировать код в буфер обмена
  1. for (var i=0;i<document.getElementsByTagName("input").lengt h;i++)
  2. {
  3. summ=document.getElementsById("string"+i);
  4. i++;
  5. }

то что написал, не проверял на работоспособность, это, что в голову пришло


Идея в общем понятна, можно конечно id во всех поменять, но уж больно это хлопотное значение. Направление понятно попробую сам подумать ещё. Но тут штука вот в чём, инпуты примерно так в таблице рассположены:

<input... ...id="string1"> и т.д. <input... ...id="string7">
. . . . . . . . .
<input... ...id="other_string1"> и т.д. <input... ...id="other_string7">
И последняя строка в которой должна быть сумма по столбцам:
<input... ...id="sum_string2"> и т.д. <input... ...id="sum_string7">

То есть надо складывать инпуты у которых ID оканчивается одинаковой цифрой.

Попробую ещё раз описать задачу: На странице есть селект. В зависимости от его значения выводится определённая таблица, структура таблиц одинаковая, то есть столбцы идентичны, а количество строк может быть разным. Инпуты в каждой строке имеют одинаковые имена с добавлением в конце цифры (номер инпута в строке). Данные вводятся в инпуты с индексом 1. По ним рассчитываются значения инпутов с индексами от 2 до 7. А в последней строке таблица инпутов только 6, и их индексы начинаются с 2. И нужно в них выдавать сумму всех полей с таким идексом.

Пока это было в экселе было всё просто. Радость

(Отредактировано автором: 08 Ноября, 2011 - 21:56:07)

 
 Top
DeMonyan
Отправлено: 09 Ноября, 2011 - 10:42:44
Post Id



Новичок


Покинул форум
Сообщений всего: 43
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




Уж не знаю насколько это получилось топорная работа, но тем не менее решение получается вот таким:

CODE (javascript):
скопировать код в буфер обмена
  1. <script>
  2. function ChangeData(el1,el2,el3,el4,el5,el6,el7,k)
  3. {
  4. //считаем количество инпутов
  5.   var n = $("input").size()-7;
  6. //индекс для цикла
  7.   var i=0;
  8. //определяем массив для суммирования
  9.   var sum= [];
  10.   sum[2]=0;
  11.   sum[3]=10;
  12.   sum[4]=10;
  13.   sum[5]=10;
  14.   sum[6]=10;
  15.   sum[7]=10;
  16. //вычисляем инпуты по строке
  17.   document.forms.warehouse[el1].value = document.forms.warehouse[el1].value.replace(",", ".");
  18.   document.forms.warehouse[el2].value=(document.forms.warehouse[el1].value*k/100).toFixed(2)+" %";  
  19.   document.forms.warehouse[el3].value=(document.forms.warehouse[el1].value*k/500).toFixed(2)+" %";  
  20.   document.forms.warehouse[el4].value=(document.forms.warehouse[el1].value*k/1000).toFixed(2)+" %";  
  21.   document.forms.warehouse[el5].value=(document.forms.warehouse[el1].value*k/5000).toFixed(2)+" %";  
  22.   document.forms.warehouse[el6].value=(document.forms.warehouse[el1].value*k/10000).toFixed(2)+" %";
  23.   document.forms.warehouse[el7].value=(document.forms.warehouse[el1].value*k/50000).toFixed(2)+" %";
  24. //вычисляем суммы по столбцам
  25.   for(var j=0;j<n;j++){
  26.   var input = $('input').get(j);
  27.   i=j % 7;
  28.   if (i!=0) {sum[i+1]=sum[i+1]+1*input.value.replace(" %","");  }
  29.   }
  30. //записываем данные в соответствующие инпуты
  31.   for (j=1;6;j++)
  32.   $('input').get(n+j).value=sum[j+1]+" %";
  33. }  
  34. </script>


Только написал и подумалось что функцию можно упростить давая ей в качестве аргумента номер строки и коэффициент для умножения, а не тучу инпутов.

(Отредактировано автором: 09 Ноября, 2011 - 10:45:30)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB