Суммирование значений отдельных групп атрибутов value отмеченных radio
Доброго времени суток!
Имеется (наверняка известный код) по подсчёту всех отмеченных значений radio. Не удаётся с его помощью реализовать задачу из название темы: Требуется подсчёт суммы групп отмеченных radio (например, с 1 по 3-ю строку и с 4 по 5 отдельные суммы (умноженные на коэффициенты)), и потом общую (сумма1*0,3+сумма2*0,5) Пытался добавить новую функцию с изменённым id="**" - вообще не работает добавлял отдельную форму для добавленного скрипта с изменёнными id="**" тоже не работает общую сумму также не знаю как вывести... А надо срочно((( Буду благодарен за любую оказанную помощь! Код скрипта function sums() { sum=0; for(i=1;i<26;i++) { var elem=document.getElementById("r"+i); if(elem.checked)sum=sum+parseInt(elem.value); } document.formText.sumOut.value=sum*0.3; } часть html кода <form name="formText"> <input type="radio" name="aa" id="r1" value="1"> <input type="radio" name="aa" id="r2" value="2"> <input type="radio" name="aa" id="r3" value="3"> <input type="radio" name="aa" id="r4" value="4"> <input type="radio" name="aa" id="r5" value="5"><BR><BR> <input type="radio" name="cc" id="r6" value="1"> <input type="radio" name="cc" id="r7" value="2"> <input type="radio" name="cc" id="r8" value="3"> <input type="radio" name="cc" id="r9" value="4"> <input type="radio" name="cc" id="r10" value="5"><BR><BR> <INPUT type="reset" value="Reset"> <br>Result:<br> <input type="text" name="sumOut" disabled="false" value=""> </form> |
В общем первая проблема решилась... как-то :)
а вот сумма общего результата пока для меня загадка( Есть у кого какие мысли? Выложу полностью код для более наглядного описания проблемы <html> <head> <script> <!-- function sums() { sum=0; for(i=1;i<11;i++) { var elem=document.getElementById("r"+i); if(elem.checked)sum=sum+parseInt(elem.value); } document.formText.sumOut.value=sum*0.3; var k = sum*0.3; document.whrite(k); } </script> <script> function sums1() { sum1=0; for(i=1; i<11; i++) { var elem=document.getElementById("g"+i); if(elem.checked)sum1=sum1+parseInt(elem.value); } document.formText_1.sumOut.value=sum1*0.5; var l = sum1*0.5; document.whrite(l); } //--> </script> <script> function all() { var all = 0; all = k+l; document.formText_all.sumOut.value=all; } </script> </head> <body> <form name="formText"> <input type="radio" name="aa" id="r1" value="1">text 1 <input type="radio" name="aa" id="r2" value="2">text 2 <input type="radio" name="aa" id="r3" value="3">text 3 <input type="radio" name="aa" id="r4" value="4">text 4 <input type="radio" name="aa" id="r5" value="5">text 5<BR><BR> <input type="radio" name="cc" id="r6" value="1">text 1 <input type="radio" name="cc" id="r7" value="2">text 2 <input type="radio" name="cc" id="r8" value="3">text 3 <input type="radio" name="cc" id="r9" value="4">text 4 <input type="radio" name="cc" id="r10" value="5">text 5<BR><BR> <input type="button" onclick="sums()" value="Подсчитать"> <INPUT type="reset" value="Отменить"> <br>Сумма:<br> <input type="text" name="sumOut" disabled="false" value=""> </form> <form name="formText_1"> <input type="radio" name="dd" id="g1" value="1">text 1 <input type="radio" name="dd" id="g2" value="2">text 2 <input type="radio" name="dd" id="g3" value="3">text 3 <input type="radio" name="dd" id="g4" value="4">text 4 <input type="radio" name="dd" id="g5" value="5">text 5<BR><BR> <input type="radio" name="bb" id="g6" value="1">text 1 <input type="radio" name="bb" id="g7" value="2">text 2 <input type="radio" name="bb" id="g8" value="3">text 3 <input type="radio" name="bb" id="g9" value="4">text 4 <input type="radio" name="bb" id="g10" value="5">text 5<BR><BR> <input type="button" onclick="sums1()" value="Подсчитать"> <INPUT type="reset" value="Отменить"> <br>Сумма:<br> <input type="text" name="sumOut" disabled="false" value=""> </form> <form name="formText_all"> <input type="button" onclick="all" value="Подсчитать"> <br>ALL<br> <input type="text" name="sumOut" disabled="false" value=""> </form> </body> </html> Нужно в отдельной форме получить результат sum и sum1 ... |
studentPas,
так много букв, но так и непонятно ... возможно вы это хотели ? <!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <script> function sums(obj) { var sum = 0, i, inp = obj.querySelectorAll(':checked'); for (i = 0; i < inp.length; i++) { var elem = inp[i]; sum += elem.value * (elem.name == "aa" ? .3 : .5); } obj.sumOut.value = sum.toFixed(1); } </script> </head> <body> <form name="formText" onchange="sums(this)"> <input type="radio" name="aa" id="r1" value="1"> <input type="radio" name="aa" id="r2" value="2"> <input type="radio" name="aa" id="r3" value="3"> <input type="radio" name="aa" id="r4" value="4"> <input type="radio" name="aa" id="r5" value="5"><BR><BR> <input type="radio" name="cc" id="r6" value="1"> <input type="radio" name="cc" id="r7" value="2"> <input type="radio" name="cc" id="r8" value="3"> <input type="radio" name="cc" id="r9" value="4"> <input type="radio" name="cc" id="r10" value="5"><BR><BR> <INPUT type="reset" value="Reset"> <br>Result:<br> <input type="text" name="sumOut" disabled="false" value=""> </form> </body> </html> |
Спасибо за совет, но немного не так (((
Задача состоит в написании "опросника", и выводе результатов. Есть несколько форм содержащие radio при их клике суммируются их значения и умножаются на коэффициент, точно так же делается с радио из следующей формы, а потом умноженные суммы складываются . Повторюсь, часть проблемы я решил (нахождение сумм и умножение из разных форм): <script> <!-- function sums() { sum=0; for(i=1;i<11;i++) { var elem=document.getElementById("r"+i); if(elem.checked)sum=sum+parseInt(elem.value); } document.formText.sumOut.value=sum*0.3; var k = sum*0.3; document.whrite(k); } </script> <script> function sums1() { sum1=0; for(i=1; i<11; i++) { var elem=document.getElementById("g"+i); if(elem.checked)sum1=sum1+parseInt(elem.value); } document.formText_1.sumOut.value=sum1*0.5; var l = sum1*0.5; document.whrite(l); } //--> </script> <script> теперь осталось найти и вывести, например all = sum + sum1, то есть передать значения sum и sum1 в новую функцию и там их сложить и вывести результат Заранее благодарен за любую помощь и совет! |
studentPas,
<script> function sums() { sum=0; for(i=1;i<11;i++) { var elem=document.getElementById("r"+i); if(elem.checked)sum=sum+parseInt(elem.value); } document.formText.sumOut.value=sum*0.3; var k = sum*0.3; return k; } function sums1() { sum1=0; for(i=1; i<11; i++) { var elem=document.getElementById("g"+i); if(elem.checked)sum1=sum1+parseInt(elem.value); } document.formText_1.sumOut.value=sum1*0.5; var l = sum1*0.5; return l; } function sumAll() { alert(sums() + sums1()) } </script> |
Спасибо огромное! и последний штрих - вывод этой суммы из sumAll по такому типу, как из sum и sum1
в html <input type="text" name="sumOut" disabled="false" value=""> что в этом html надо прописать что б отобразить alert? |
studentPas,
:blink: function sumAll() { return sums() + sums1() } <input type="text" name="sumOut" disabled="false" onclick="this.value=sumAll()" value=""> |
Добавляю Ваши поправки - считается только по первой форме(((
Убираю эту строку <input type="text" name="sumOut" disabled="false" onclick="this.value=sumAll()" value=""> считает по двум формам - но естественно вывода суммы нет (( а он необходим.... Если Вам не сложно просмотрите во втором сообщении я выложил работающий код, который считает по формам, но без вывода общей суммы,, может подскажите как и что в нём изменить/добавить, что б заработала sumAll() и вывод? |
Почти решил проблему
<input type="button" onclick="this.value=sumAll()" value="Подсчитать"> <input type="text" disabled="false" onclick="this.value=sumAll()" value=""> Выводит результат - только в кнопку, а не в текст %) |
так?
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script src="https://cdn.rawgit.com/finom/balalaika/master/balalaika.min.js"></script> <script src="https://cdn.rawgit.com/brettz9/4212262/raw/00d5abe3730b05487eace455fbd59eb82a1f243f/Array.from.js"></script> <script> $(function(){ var tmp = {}; function sums(obj,i){ var checked = Array.from($(":checked", obj)).map(function(e){return +e.value}),sum = checked.length?checked.reduce(function(s,current){return s+current;}):0; tmp[obj.getAttribute('name')] = sum; obj.sumOut.value = sum.toFixed(1); console.log(tmp); }; function calcAll(obj){ var s = 0; for (var k in obj) { s += obj[k]; } sumOutAll.value = s.toFixed(1); return s; }; $('.formTxt').forEach(function(e){ var inp = $('.calc',e); inp.on('click',function(){ sums(e); }); }); $('.calcAll').on('click',function(){ console.log(calcAll(tmp)); }); }); </script> </head> <body> <form name="formText" class="formTxt"> <input type="radio" name="aa" id="r1" value="1">text 1 <input type="radio" name="aa" id="r2" value="2">text 2 <input type="radio" name="aa" id="r3" value="3">text 3 <input type="radio" name="aa" id="r4" value="4">text 4 <input type="radio" name="aa" id="r5" value="5">text 5<BR><BR> <input type="radio" name="cc" id="r6" value="1">text 1 <input type="radio" name="cc" id="r7" value="2">text 2 <input type="radio" name="cc" id="r8" value="3">text 3 <input type="radio" name="cc" id="r9" value="4">text 4 <input type="radio" name="cc" id="r10" value="5">text 5<BR><BR> <input type="button" class="calc" value="Подсчитать"> <INPUT type="reset" value="Отменить"> <br>Сумма:<br> <input type="text" name="sumOut" disabled="false" value=""> </form> <form name="formText_1" class="formTxt"> <input type="radio" name="dd" id="g1" value="1">text 1 <input type="radio" name="dd" id="g2" value="2">text 2 <input type="radio" name="dd" id="g3" value="3">text 3 <input type="radio" name="dd" id="g4" value="4">text 4 <input type="radio" name="dd" id="g5" value="5">text 5<BR><BR> <input type="radio" name="bb" id="g6" value="1">text 1 <input type="radio" name="bb" id="g7" value="2">text 2 <input type="radio" name="bb" id="g8" value="3">text 3 <input type="radio" name="bb" id="g9" value="4">text 4 <input type="radio" name="bb" id="g10" value="5">text 5<BR><BR> <input type="button" class="calc" value="Подсчитать"> <INPUT type="reset" value="Отменить"> <br>Сумма:<br> <input type="text" name="sumOut" disabled="false" value=""> </form> <form name="formText_all"> <input type="button" class="calcAll" value="Подсчитать"> <br>ALL<br> <input type="text" name="sumOut" disabled="false" value="" id="sumOutAll"> </body> </html> |
Часовой пояс GMT +3, время: 06:39. |