通过javascript循环复选框

时间:2014-04-26 07:06:49

标签: javascript jquery html

我有许多复选框,我想检查它们是否被选中(1)或未选中(0)。我想将结果放在一个数组中,以便我可以将它们发送到服务器以保存在表中。我试过以下代码:

<input class="publish" id="chkBox1" type="checkbox" checked>
<input class="publish" id="chkBox2" type="checkbox" checked>
<input class="publish" id="chkBox3" type="checkbox" checked>
<input class="publish" id="chkBox4" type="checkbox" checked>
<input class="publish" id="chkBox5" type="checkbox" checked>

<script>
$('#save-btn').click(function(evt){
    evt.preventDefault();

    var numberOfChBox = $('.publish').length;
    var checkArray = new Array(); 

    for(i = 1; i <= numberOfChBox; i++) {

        if($('#chkBox' + i).is(':checked')) {
            checkArray[i] = 1;  
        } else {
        checkArray[i] = 0;
        }
    }
    alert(checkArray);
});
</script>

但警报输出:

,1,0,1,0,1,1

除了undefined中的第一个索引外,这些值是正确的。共有5个复选框,但数组长度为6个索引。这是为什么?

3 个答案:

答案 0 :(得分:4)

考虑到您编写的第一个元素是checkArray[1],而i1开头,而不是checkArray[0]

checkArray[i]替换为for bucle

中的checkArray[i-1]

答案 1 :(得分:4)

在html:http://jsfiddle.net/v4dxu/

中使用正确的结束标记,以高效的方式:) http://jsfiddle.net/L4p5r/尝试

非常好的链接:https://learn.jquery.com/javascript-101/arrays/

同样在你的html结尾你的标签/>,即

<input class="publish" id="chkBox4" type="checkbox" checked>

休息应该有助:)

<强>代码

var checkArray = new Array(); 
$('input[type=checkbox]').each(function () {
    this.checked ? checkArray.push("1") : checkArray.push("0");
});

alert(checkArray);

答案 2 :(得分:3)

如上面的答案所述,问题在于索引(i)。但是如果你想进一步简化代码,那么下面的代码呢?

var checkArray = [];

$('input.publish').each(function () {
   checkArray.push($(this).is(':checked'));
});

alert(checkArray);