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

HTML Control Array in JavaScript - Checkbox array of 1 returns zero length

本文关键字:数组 返回 复选框 中的 HTML 控制 JavaScript      更新时间:2023-09-26

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

下面带有两个复选框的代码工作得很好,并返回一个值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>

返回0(零)长度的代码…

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

Working jsFiddle Demo

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);
}

在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);
}

和jquery中的

function categoryOnClick() {           
    alert($('input:checked').length)
}

希望有帮助

你可以使用jQuery:

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