Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проверка chekbox масива и сложения их значений (https://javascript.ru/forum/misc/33699-proverka-chekbox-masiva-i-slozheniya-ikh-znachenijj.html)

ss18EXEL 04.12.2012 10:50

Проверка chekbox масива и сложения их значений
 
Добрый день есть такой массив чекбоксов
<input type='chekbox' name='chec' id='chec' value='1000'>
    <input type='chekbox' name='chec' id='chec' value='100'>
    <input type='chekbox' name='chec' id='chec' value='10'>
    <input type='chekbox' name='chec' id='chec' value='1'>


мне надо их проверить нажали их или нет и если из этих чекбоксов которые нажали, надо взять все нажатые и сложить их значения. например если нажали 1 и 4 то на отправку из формы пойдёт 1001. если нажали все 4 то на отправку идёт 1111 Подскажите как это можно осуществить?

Sanda 04.12.2012 11:05

Во-первых, дать им разные id. Например, checkbox1, checkbox2 и т.д.
Дальше в цикле проверять document.getElementById('checkbox' + i).checked и формировать итоговую сумму.

Tek 04.12.2012 11:11

решение на jquery
function get_checked_sum(){
     checked = $("input:checked");
     sum = 0;
     for(i=0;i<checked.lenght;i++){
        sum += parseInt(checked.eq(i).val(),10);
     }
     return sum
}

ruslan_mart 04.12.2012 11:22

<div id="checks">
<input type="checkbox" value="1000">
<input type="checkbox" value="100">
<input type="checkbox" value="10">
<input type="checkbox" value="1">
</div>

<script>
document.getElementById('checks').onclick = function()
{
    var chec = document.getElementById('checks').getElementsByTagName('input');
    var sum = 0;
    for(i=0;i<chec.length;i++)
    {
        if(chec[i].checked)
        {
            sum += (chec[i].value*1);
        }
    }
    alert(sum);
}
</script>

GuardCat 04.12.2012 11:25

<input type='checkbox' name='chec' id='chec' value='1000'>
    <input type='checkbox' name='chec'  value='100'>
    <input type='checkbox' name='chec' value='10'>
    <input type='checkbox' name='chec' value='1'>
    
    <input type = "button" id = "show" value = "show me">


    <script>
      function getCheckboxesValues( name ) {
        var x, result = "", checkboxes = document.getElementsByName( name );
        
        for ( x = 0; x < checkboxes.length; x++ ) {
          result += checkboxes[ x ].checked ? checkboxes[ x ].value : ""
        }
        
        return result
      }
      
      document.getElementById( "show" ).onclick = function() {
        alert( getCheckboxesValues( "chec" ) )
      }
    </script>


checkbox, а не chekbox
И одинаковые id делать не стоит.

nerv_ 04.12.2012 13:32

GuardCat, es5, не? ) И stringToNumber.

GuardCat 04.12.2012 13:58

nerv_, ТС хочет именно стринги складывать, как я понял. А что ES5? использовать querySelectorAll?

nerv_ 04.12.2012 16:12

GuardCat, http://es5.javascript.ru/x15.4.html#x15.4.4.21

<input type='checkbox' name='chec' id='chec' value='1000'>
<input type='checkbox' name='chec'  value='100'>
<input type='checkbox' name='chec' value='10'>
<input type='checkbox' name='chec' value='1'>

<input type = "button" id = "show" value = "show me">


<script>
    function getCheckboxesValues( name ) {
        return Array.prototype.reduce.call( document.getElementsByName( name ), function( sum, input ) {
            return sum += input.checked ? input.value : '';
        }, '' );
    }
  
  document.getElementById( "show" ).onclick = function() {
    alert( getCheckboxesValues( "chec" ) )
  }
</script>

GuardCat 04.12.2012 19:56

nerv_, даже не подумал об этом. Спасибо.

ss18EXEL 18.12.2012 16:51

function valuesSum()
{
        var sum = 0;
       
        var checks = document.getElementsByName('chec[]');     
       
        for(var i = 0; i < checks.length; i++)
        {
           if(checks[i].checked)
           sum += parseInt(checks[i].value, 10);
        }
       
        return sum;
}
 
window.onload = function()
{
        document.getElementById('btn').onclick = function()
        {
                var sum = valuesSum();
               
                alert(sum);
        }
}

Это я воплатил в жизнь но проблема стала в другом когда выбираются данные из базы если допустим туда занесли данные два последних чекбокса и получили результат 11 а как поправить функцию в джаве чтобы если первые два не выбрал передавалось значение текстом 0011 ((
если выбрали нижних 3 то результат был 0111
надо чтобы приходило четыри цифра


Часовой пояс GMT +3, время: 19:20.