JavaScript中的HTML控件数组-1的复选框数组返回零长度

JavaScript中的HTML控件数组-1的复选框数组返回零长度,javascript,html,arrays,checkbox,zero,Javascript,Html,Arrays,Checkbox,Zero,我正在使用复选框的控制数组来捕获多重选择 下面的代码带有两个复选框,工作正常,返回的值为2,与预期的值相同(或有多少) 但是,如果数组中只有一个复选框项,它将返回长度0(零)。。。。为什么会这样?它不应该返回1的长度吗 我曾在Internet Explorer和Chrome上试用过,效果相同。作为解决方法,我必须在数组中包含一个隐藏的伪造复选框,以确保在运行代码时始终有两个或更多项 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transition

我正在使用复选框的控制数组来捕获多重选择

下面的代码带有两个复选框,工作正常,返回的值为2,与预期的值相同(或有多少)

但是,如果数组中只有一个复选框项,它将返回长度0(零)。。。。为什么会这样?它不应该返回1的长度吗

我曾在Internet Explorer和Chrome上试用过,效果相同。作为解决方法,我必须在数组中包含一个隐藏的伪造复选框,以确保在运行代码时始终有两个或更多项

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
    <title></title>
    <script language="javascript" type="text/javascript">
        function categoryOnClick() {
            var selectedRows = document.searchForm.elements['categorySelect[]'];
            alert(selectedRows.length);
        }
    </script>
</head>
<body>
    <form name="searchForm" action="">
        <input type="checkbox" name="categorySelect[]" id="1" onclick="categoryOnClick();"/>
        <input type="checkbox" name="categorySelect[]" id="2" onclick="categoryOnClick();"/>
    </form>
</body>
</html>

函数类别单击(){
var selectedRows=document.searchForm.elements['categorySelect[]'];
警报(selectedRows.length);
}
返回0(零)长度的代码

<form name="searchForm" action="">
     <input type="checkbox" name="categorySelect[]" id="1" onclick="categoryOnClick();"/>
</form>

function categoryOnClick() {
    var rows = document.getElementsByName('categorySelect[]');
    var selectedRows = [];
    for (var i = 0, l = rows.length; i < l; i++) {
        if (rows[i].checked) {
            selectedRows.push(rows[i]);
        }
    }

    alert(selectedRows.length);
}
函数类别单击(){
var rows=document.getElementsByName('categorySelect[]);
var selectedRows=[];
对于(变量i=0,l=rows.length;i
您可以使用jQuery执行此操作:

function categoryOnClickjQuery() {
    var selectedRows = $('form input').attr('name', 'categorySelect[]');
    alert(selectedRows.length);
}

在javascript中,您可以

function categoryOnClick() {
    var count = document.querySelectorAll("input[type=checkbox]").length;
    var checkedElements = 0;
    for (var i = 0; i < count; i++) {
        checkedElements = checkedElements + parseInt((document.querySelectorAll("input[type=checkbox]")[i].checked) ? 1 : 0);    
    }
    alert(checkedElements);
}

希望这有助于使用
document.getElementsByName
通过
name
attribute+获取元素,是否要获取选中的复选框?因此,您也应该检查
checked
属性,请参见我的答案:)id不能是数字!这是一个疯狂的代码,它可以工作-这是一个数组错误吗?它没有回答我的问题,但我现在肯定可以使用代码。为什么rows.length在您的示例中有效,而selectedRows.length在我的示例中不起作用(我对当前选中的复选框不感兴趣),例如,如果(selectedRows.length>0)doSomething(),我想说这样的话;我看到的是数组中复选框的总数,而不仅仅是选中的items@Patrick在上面的代码中,我给出了复选框的长度,但是您可以使用
行。长度
,因为它将获得复选框的总数,请参见此。非常感谢。。。我仍然对document.getElementsByName和document.searchForm.elements[]@Patrick
elements
是一个包含所有表单元素的数组,我想你用错了,看看这个和这个。
function categoryOnClick() {           
    alert($('input:checked').length)
}