Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Помогите с формой расчета.... Пожалуйста (http://www.flasher.ru/forum/showthread.php?t=132994)

glukaviy 25.11.2009 00:37

Помогите с формой расчета.... Пожалуйста
 
Есть такая форма:
http://std-web.ru/test/1.jpg
Она состоит из
Приход:
10 текст инпутов в столбец - комментарии.
потом идут суммы.
Расход:
10 текст инпутов в столбец - комментарии.
потом идут суммы.

Поле итого (приход): Итоговая сумма сумм таблицы приход.
Поле итого (расход): Итоговая сумма сумм таблицы расход.
Необходимо чтобы при вводе итоговая суммы менялась сразу.. т.е. если я в первом поле сумма набрал 100 оно отобразилось сразу в итого....
И как сделать сумму полей если они не заполнены все.. т.е. если из 10 сумм заполнено только 3 или 6 ..
Спасибо.
Добавил аот такой код... Но итоговая сумма появляется если заполнены все три поля.... как избежать заполнение всех полей?
Код AS1/AS2:

var listener:Object = new Object();
listener.onKeyUp = function() {
        _root.itog1.text = Number(_root.summ1.text) + Number(_root.summ2.text)+ Number(_root.summ3.text) ;
 
};
Key.addListener(listener);


mooncar 25.11.2009 02:07

1. Лучше не использовать класс Key.
Лучше использовать класс TextFileld, точнее, обработчик его события onChanged.
Эта функция будет вызываться всякий раз, когда юзер что-то введет в поле, на которое повешен этот обработчик.
В эту функцию запишите искомое суммирование (естественно, с использованием Number());

2. По сути - в вашем коде, скорее всего, дело в том, что если в поле нет текста, Number() выдает NaN, и суммирование с этим NaN будет тоже NaN.
Я это не проверял, проверьте вы.
Если это так, то подумайте, и вставьте где нужно проверку.
Для этого можно использовать функцию isNaN. Если аргумент функции - не number-типа, то функция выдаст true. Это можно использовать при проверке и отказаться от суммирования такого элемента. То есть
Код AS1/AS2:

trace(isNaN(''));

(проверка пустой строки) выведет true, и если это так, то элемент не должен входить в формулу суммирования, или должен быть равен нулю.

Например, можно так:
Код AS1/AS2:

function summation () {
        s1 = Number(_root.summ1.text);
        s2 = Number(_root.summ2.text);
        s3 = Number(_root.summ3.text);
        !isNaN(s1) ? sum1 = s1 : sum1 = 0;
        !isNaN(s2) ? sum2 = s2 : sum2 = 0;
        !isNaN(s3) ? sum3 = s3 : sum3 = 0;       
        _root.itog1.text =  sum1 + sum2 + sum3;
}
 
_root.summ1.onChanged = _root.summ2.onChanged = _root.summ3.onChanged = summation;
_root.summ1.restrict = _root.summ2.restrict = _root.summ3.restrict = '0-9.';

Последняя строка (с restrict) вводит ограничение на диапазон вводимых символов, чтобы юзер не вбивал туда буквы и прочее, а только цифры и точку (если есть десятичные).

Добавлено через 35 минут
Если полей много, то в функции можно сделать циклы, для аккуратности.

glukaviy 25.11.2009 03:15

Спасибо, справился сам... тему можно закрыть.


Часовой пояс GMT +4, время: 22:27.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.