[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: select sum
maximka787
Всем привет. недавно обсуждали сумму селектов. Вот сейчас задача поменялась, а у меня не получается сделать. Пример то простейший, а я завис. Помогите кто может. Надо чтобы сумму считалась выбранных значений.

<script language="JavaScript">
function
tt(){
var q = document.getElementsByName("q[]");
var total = document.getElementById("total");
var sum = 0;
for(var i=0; i<=q.length; i++){
//alert(q.value); //TEST НЕ РАБОТАЕТ
//sum += parseInt(q[i].selectedIndex.value); ВОТ ТУТ НЕПРАВИЛЬНО

total.value = sum;
}
}

</script>

<form
id="form">

<select
name="q[11]" onChange="tt(this.value)">
<option
value="0">0</option>
<option
value="1">1</option>
</select>

<select
name="q[15]" onChange="tt(this.value)">
<option
value="0">0</option>
<option
value="1">1</option>
</select>

<input
type="text" id="total">
</form>




Спустя 3 минуты, 18 секунд (20.06.2011 - 10:26) linker написал(а):
Во-первых, этот метод getElementsByName не стандартный, во-вторых нет элементов с именем q[], есть элементы с именами q[11] и q[15].

Спустя 1 минута, 57 секунд (20.06.2011 - 10:28) maximka787 написал(а):
linker
а у меня массив. там может быть любая цифра. главное чтобы имя было q

Спустя 12 минут, 38 секунд (20.06.2011 - 10:41) linker написал(а):
Ну это в PHP у тебя будет массив, а для Javascript'а это не массив, а простая строка. Используй getElementsByTagName('SELECT'), типа:
var elements = document.getElementById('form').getElementsByTagName('SELECT');
var sum = 0;
for(var i in elements)
{
sum += elements[i].value;
}
alert(sum);

Спустя 6 минут, 59 секунд (20.06.2011 - 10:48) maximka787 написал(а):
эээ, linker идея то хороша. но не считает сумму, а делает алерт таким образом

0
1
2
undefened
undefened

Спустя 3 минуты, 30 секунд (20.06.2011 - 10:51) linker написал(а):
А ты правильно переписал мой код, ибо alert() должен показаться только один раз? А добавить проверку что имя есть q[]?
var elements = document.getElementById('form').getElementsByTagName('SELECT');
var sum = 0;
for(var i in elements)
{
if (elements[i].name.match(/^q\[\d+\]$/))
sum += elements[i].value;
}
alert(sum);

Спустя 1 минута, 22 секунды (20.06.2011 - 10:52) maximka787 написал(а):
linker
Да я твой код никогда не менял, он всегда работает. тут наверно я просто чайник еще, что-то потерял.

Спустя 29 минут, 57 секунд (20.06.2011 - 11:22) maximka787 написал(а):
linker
Все разобрался. благодарю за помощь. Переделал я твой скрипт немного.

function tt(){

var elements = document.getElementsByTagName('select');
var total = document.getElementById("total");
var sum = 0;

for(var i=0; i<elements.length; i++){
sum += parseFloat(elements[i].value);
}
total.value = sum;
}


_____________
..Работает - не трогай!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.