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

HTML+CSS+JavaScript

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

 

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

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

тема: Суммирование text полей
 
 автор: valor   (13.01.2008 в 08:22)   письмо автору
 
 

Приветствую вас о великие JavaScript гуру
Пожалуйста помогите мне решить следующую проблемму

Пусть форма состоящая из таблици палей типа TEXT
================= =====А ================ B ============= C
| {статический текст}| {поле типа TEXT} | {Поле типа TEXT} | {Поле типа TEXT} |
===============================================================
|__ Иванов В.А ____|____[1212121]___|______ [0.2]_____ |___ [результат]___| А
_______________________________________________|__ [сумма строк]__| B

Строки "А" выводятся из БД и их количество может быть разным,
в текстовом поле столбца "А" из базы выводится некая сумма которая должна бытьт перемноженна на число вводимое пользователем в поле столбца "В" и результат вычеслений занесен в тестовое поле "С" . После чего необходимо суммировать все поля типа TEXT столбца "С" и вывестирезультат в статичное поле "В"

Я вот тут функцию набросал тока что-то неладится

TotalRowByQuery - в этот пораметр передается количество строк

function SummRows(TotalRowByQuery){
if (TotalRowByQuery == 0)
    {
        document.getElementById("textfield8").value = "Пусто!"
    }
    var sr =Number(document.getElementById("less").value)
    var result
    for (var i = 0;i<TotalRowByQuery;i++)
    {
      reault += Number(sr[i])
    }
    return document.getElementById("textfield8").value = result
}


помогите плиз очень важно понять мне где я неправ , просто с JavaScript никогда неработал .

   
 
 автор: CNT   (13.01.2008 в 11:04)   письмо автору
 
   для: valor   (13.01.2008 в 08:22)
 

Яваскрипт работает с конкретными объектами страницы.

Я не знаю, как именно устроена ваша страница - в виде таблицы (с тегом <table>) сделаны у вас строки или без этого тега ("строки" разделены тегом<br>)?
И не знаю, что такое "less" ("textfield8" - догадываюсь, но какой будет ID у того <input>, куда надо внести итоговый результат, для функции "умножить&суммировать" неважно).

Поэтому набросал скрипт, исходя из следующих предположений:

1. если TotalRowByQuery - количество "строк", в каждой из которой всего ТРИ тега <input>, то тогда суммарное количество ПЕРВЫХ тегов <input type="text"> на странице будет таким: TotalRowByQuery * 3 + 1 (где "+1" - это последний тег <input type="text">, куда и надо внести результат суммирования по последнему "столбцу").

2. ещё какие-то теги <input> (любого TYPE, в том числе и type="text") могут находиться на странице, но они в коде страницы будут ПОСЛЕ этих самых первых (TotalRowByQuery * 3 + 1) штук, но ни в коем случае НЕ ДО и НЕ МЕЖДУ этих самых ПЕРВЫХ тегов <input>

3. ошибки пользователя, вводившего данные, могут быть двух типов:
а) вовсе не ввёл данные в какой-то из <input>'ов второго "столбца";
б) в какой-то из <input>'ов второго "столбца" случайно ввёл хотя бы один нецифровой символ (кроме ОДНОЙ точки).

function SummRows (TotalRowByQuery)
{
if (!TotalRowByQuery)
   {
   alert ("Пусто!");
   return;
   } 
for (var obj = document.getElementsByTagName ('input'), sum = j = 0; j < (TotalRowByQuery * 3 + 1); j = j + 3)
   {
   if (!obj [j + 1].value || obj [j + 1].value.replace (/\d/g, '').replace (/\./, '').length)
      {
      alert ('Ошибка в строке ' + parseInt ((j / 3 + 1), 10));
      return;
      }
   obj [j + 2].value = obj [j].value * obj [j + 1].value;
   sum += obj [j + 2].value;
   }
obj [j].value = sum;
}

Комментарии:
а) getElementsByTagName ('input') - коллекция ВСЕХ тегов <input> на странице
б) циклом перебираем ПЕРВЫЕ (TotalRowByQuery * 3) тега <input> из этой коллекции, причем перебираем через три штуки, т.е. по первому <input> в каждой "строке" (там, где данные введены из БД)
в) тестируем значение второго в строке <input> на правильность ("значение введено и оно не содержит нецифровых символов, кроме ОДНОЙ точки"). При наличии ошибки прерываем работу функции (при этом во всех "строках" до той, где ошибка, результат умножения уже будет вписан... но это никак не помешает повторной работе скрипта после исправления ошибки)
г) умножаем и параллельно суммируем в переменную sum
д) по выходу из цикла в <input> (который по счету TotalRowByQuery * 3 + 1) вносим значение переменной sum

   
 
 автор: valor   (14.01.2008 в 08:50)   письмо автору
 
   для: CNT   (13.01.2008 в 11:04)
 

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


function LineSummRow(num){
        var x = document.getElementById("summ_nach_"+num).value; // Сумма начислений в строке
        var y = document.getElementById("procent_"+num).value; // Процент в строке
        document.getElementById("summ_proc_"+num).value = x*y;
}


первая функция работает так как надо
а вот вторая нет

function SummRows(num){
        var total_sum = 0;
        for(var i=1; i<=<? echo $count_var;?>; i++){
               total_sum = total_sum + document.getElementById("summ_proc_" + num).value;
        }
        document.getElementById("totalsum").value = total_sum;
}


вопрос по последней вункции .
При выводе результата оне не сумирует столбец тестовых полей а трижды выводит последний..

вот отрывок html кола формы


   <?php $count_var 1; do { $count_var ++; ?>
                            <tr>
                              <td><?php echo $row_Select_period['trid']; ?></td>
                              <td><div align="center">
<input name="summ_nach" type="text" 
id="summ_nach_<? echo $count_var;?>
class="TabbedPanelsTabHover" value="<?php 
echo 
$row_Select_period['Sum(`kv_summary`.
`nach_ob`)'
]; ?>"/>
                              </div></td>
                              <td><div align="center">
                                  <input 
name="procent" id="procent_<? echo 
$count_var;?>" type="text" 
class="TabbedPanelsTabHover"/>
                              </div></td>
                              <td><div align="center">
                                <input name="valter" type="text" 
class="TabbedPanelsTabHover" 
id="summ_proc_<? echo $count_var;?>"/>
                                <input 
type="button" name="button5" id="button5" 
value="Суммировать"  
onclick="LineSummRow(<? echo 
$count_var?>)"/>
                              </div></td>
                            </tr>
                            <?php } while 
(
$row_Select_period 
mysql_fetch_assoc($Select_period)); ?>
                          <tr>

   
 
 автор: CNT   (14.01.2008 в 09:17)   письмо автору
 
   для: valor   (14.01.2008 в 08:50)
 

1. Да не за что.

2. Таких как вы - понять действительно трудно. Но всё же - я постарался понять.
И набросал вам код ВПОЛНЕ работающий в ваших условиях.

Но ума же у вас - явно палата, поэтому прочитать, то, что написано, вы не в состоянии. И понять, соответственно, не захотели, что данный вам код УНИВЕРСАЛЕН и от всяких там ID и тегов <table> и <td> не зависит (есть они на странице, или их нету - НЕВАЖНО!)
Тем более ваша "палата ума" не позволила вам даже попытаться протестировать посланный вам код.


3. Если хотите что-то спросить и получить КОНКРЕТНЫЙ ответ, то ВЫДЕЛИТЕ из кода ГЛАВНОЕ, уберите на хер всякие PHP-вставки...
В вашем случае:
а) дайте конкретный HTML-код одной "строки" с тремя инпутами;
б) дайте конкретный HTML-код последнего инпута, куда надо ввести итоговый результат;
в) дайте конкретный HTML-код управляющего элемента (ссылки или кнопки, по нажатии на которую запускается нужная вам функция "умножения&сложения")

А разбираться в том дерьме, что вы здесь выложили, вряд ли кто будет.

   
 
 автор: valor   (14.01.2008 в 11:32)   письмо автору
 
   для: CNT   (14.01.2008 в 09:17)
 

1.Спасибо за совет учту
2. Ваш код я разобрал , тестил , счел его интерестным но увы он не отвечает моим требованиям.
3. Ума уменя полата
4.

function LineSummRow(num){
        var x = document.getElementById("summ_nach_"+num).value; // Сумма начислений в строке
        var y = document.getElementById("procent_"+num).value; // Процент в строке
        document.getElementById("summ_proc_"+num).value = x*y;
}

function SummRows(){
        var total_sum = 0;
        for(var i=1; i<=4 ; i++){
            
                total_sum += Number(document.getElementById("summ_proc_" + i).value);
        }
        document.getElementById("totalsum").value = total_sum;
}

эти две функции на 100% реализуют то что мне надо...
5. сори за возможно неясное изложение вопроса.... обычно я на форумы не лажу в поисках решения проблемм , просто JavaScript не тот язык на котором я обычно пишу и я совершенно его незнаю...

   
Rambler's Top100
вверх

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