|
|
|
| Приветствую вас о великие 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 никогда неработал . | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: 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>
|
| |
|
|
|
|
|
|
|
для: valor
(14.01.2008 в 08:50)
| | 1. Да не за что.
2. Таких как вы - понять действительно трудно. Но всё же - я постарался понять.
И набросал вам код ВПОЛНЕ работающий в ваших условиях.
Но ума же у вас - явно палата, поэтому прочитать, то, что написано, вы не в состоянии. И понять, соответственно, не захотели, что данный вам код УНИВЕРСАЛЕН и от всяких там ID и тегов <table> и <td> не зависит (есть они на странице, или их нету - НЕВАЖНО!)
Тем более ваша "палата ума" не позволила вам даже попытаться протестировать посланный вам код.
3. Если хотите что-то спросить и получить КОНКРЕТНЫЙ ответ, то ВЫДЕЛИТЕ из кода ГЛАВНОЕ, уберите на хер всякие PHP-вставки...
В вашем случае:
а) дайте конкретный HTML-код одной "строки" с тремя инпутами;
б) дайте конкретный HTML-код последнего инпута, куда надо ввести итоговый результат;
в) дайте конкретный HTML-код управляющего элемента (ссылки или кнопки, по нажатии на которую запускается нужная вам функция "умножения&сложения")
А разбираться в том дерьме, что вы здесь выложили, вряд ли кто будет. | |
|
|
|
|
|
|
|
для: 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 не тот язык на котором я обычно пишу и я совершенно его незнаю... | |
|
|
|