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]   

> Без описания
alexiy
Отправлено: 13 Января, 2012 - 16:42:03
Post Id



Посетитель


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


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




есть форма
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <form action="" method="POST">
  3.   <input type="text" name="text1" id="text1">
  4.   <input type="text" name="text2" id="text2">
  5.   <input type="text" name="text3" id="text3">
  6.   <input type="text" name="text" id="text">
  7. </form>
  8.  

нужно посчитать сумму полей text1,text2,text3 и вывести в поле text.
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. $(document).ready(function(){
  3.  
  4.         var summ = 0;
  5.         var fields = $([]).add('#text1')
  6.                                 .add('#text2')
  7.                                 .add('#text3');
  8.        
  9.         fields.change(function()
  10.         {
  11.                 summ += parseInt($(this).val());
  12.                 $('#text').val(summ);          
  13.         });
  14.        
  15. });
  16.  

Данный код считает значения, если ввести 1,1,1 ->выдаст 3 если же потом поменять первую единицу на 2, то тогда выдаст 5, а должен выводить 4, как это исправить?
 
 Top
IllusionMH
Отправлено: 13 Января, 2012 - 16:51:30
Post Id



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


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


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




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

(Отредактировано автором: 13 Января, 2012 - 16:52:55)

 
 Top
alexiy
Отправлено: 13 Января, 2012 - 16:54:01
Post Id



Посетитель


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


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




IllusionMH пишет:
alexiy, потому, что вы к предыдущему полученному результату прибавляете новое значение.
Нужно обнулять summ при каждом изменении и пересчитывать его снова.

а можно примерный набросок увидеть?
 
 Top
IllusionMH
Отправлено: 13 Января, 2012 - 17:00:50
Post Id



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


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


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




CODE (javascript):
скопировать код в буфер обмена
  1. $(document).ready(function() {
  2.     var fields = $([]).add('#text1')
  3.                       .add('#text2')
  4.                       .add('#text3');
  5.  
  6.     fields.change(function() {
  7.         var sum = 0;
  8.         fields.each(function() {
  9.             sum += parseInt($(this).val(), 10) || 0;
  10.         });
  11.         $('#text').val(sum);
  12.     });
  13. });

(Отредактировано автором: 13 Января, 2012 - 17:01:33)

 
 Top
alexiy
Отправлено: 13 Января, 2012 - 17:54:04
Post Id



Посетитель


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


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




спасибо за помощь, а как думаете можно ли данный код переделать чтобы он не только считал поля, но также и чекбоксы. чтобы при нажатии значение прибавлялось, при отжатии отнемалось?
 
 Top
IllusionMH
Отправлено: 13 Января, 2012 - 18:23:02
Post Id



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


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


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




alexiy, ну дык по аналогии ж, только нужно проверить тип и выбран/нет
http://jsfiddle[dot]net/IllusionMH/T2e3C/
(Добавление)
Изменил пример. Добавил класс для полей которые должны суммироваться, чтобы не страдать фигней с .add для каждого поля

(Отредактировано автором: 13 Января, 2012 - 18:35:32)

 
 Top
alexiy
Отправлено: 13 Января, 2012 - 18:43:29
Post Id



Посетитель


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


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




IllusionMH пишет:
alexiy, ну дык по аналогии ж, только нужно проверить тип и выбран/нет
http://jsfiddle[dot]net/IllusionMH/T2e3C/
(Добавление)
Изменил пример. Добавил класс для полей которые должны суммироваться, чтобы не страдать фигней с .add для каждого поля

спасибо, тебе помог сильно Улыбка
 
 Top
Champion Супермодератор
Отправлено: 13 Января, 2012 - 18:49:38
Post Id



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


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


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




alexiy пишет:
спасибо, тебе помог сильно
Казнить нельзя помиловать Улыбка
 
 Top
alexiy
Отправлено: 13 Января, 2012 - 18:50:24
Post Id



Посетитель


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


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




вот черт, (facepalm) в общем большое спасибо IllusionMH
 
 Top
IllusionMH
Отправлено: 13 Января, 2012 - 19:02:13
Post Id



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


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


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




Пользуйся ;)
 
 Top
d1ss
Отправлено: 21 Мая, 2013 - 18:24:01
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Май 2013  


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




Всем добрый день!

IllusionMH, скажите, пожалуйста.

CODE (javascript):
скопировать код в буфер обмена
  1. $(document).ready(function() {
  2.     var fields = $([]).add('#color1')
  3.                       .add('#color2')
  4.                       .add('#color3');
  5.  
  6.     fields.change(function() {
  7.         var sum = 0;
  8.         fields.each(function() {
  9.             sum += parseInt($(this).val(), 10) || 0;
  10.         });
  11.         $('#sum').val(sum);
  12.     });
  13. });


а как сделать так, чтобы поля color1, color2, color3 имели значения 10, 5, 3 ?
Чтобы пользователь при вводе 2, 1, 3, увидел в поле text 34 (20+5+9).

Огромное спасибо!
 
 Top
IllusionMH
Отправлено: 22 Мая, 2013 - 11:21:23
Post Id



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


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


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




d1ss, сделать поля с соответствующими ID и вписать в них 10, 5, 3. Потом сделать еще 3 поля и как-то их связать(или ID похожий, но добавить букву в конец (к примеру m), или родитель общий)

потом в цикле
CODE (javascript):
скопировать код в буфер обмена
  1. sum += (parseInt($(this).val(), 10) || 0)  * (parseInt($('#' + this.id + 'm').val(), 10) || 0);

допилить напильником и получить профит
 
 Top
d1ss
Отправлено: 23 Мая, 2013 - 09:40:41
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Май 2013  


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




IllusionMH, спасибо огромное. Всё, как нужно!

P.S. Наберу необходимое кол-во сообщений и нажму кнопочку "Спасибо". Пока она у меня не работает.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB