查找具有相同ID的复选框的数量

时间:2011-10-20 10:21:50

标签: jquery

我有一个可怕的问题,试图查看是否点击了使用某个ID的任何复选框。

复选框的一个例子是

<input name="our_list[]" value="AB1-A" type="checkbox" class="listheck" id ="AB1 OB 90xs r5Ty" />
<input name="our_list[]" value="AB1-B" type="checkbox" class="listheck" id ="AB1 OB 90xs r5Ty" />
<input name="our_list[]" value="AB1-C" type="checkbox" class="listheck" id ="AB1 OB 90xs r5Ty" />
<input name="our_list[]" value="AB1-D" type="checkbox" class="listheck" id ="AB1 OB 90xs r5Ty" />
<input name="our_list[]" value="AB2-A" type="checkbox" class="listheck" id ="AB2 OB 90xs r5Ty" />
<input name="our_list[]" value="AB2-B" type="checkbox" class="listheck" id ="AB2 OB 90xs r5Ty" />
<input name="our_list[]" value="AB2-C" type="checkbox" class="listheck" id ="AB2 OB 90xs r5Ty" />
<input name="our_list[]" value="AB2-D" type="checkbox" class="listheck" id ="AB2 OB 90xs r5Ty" />

我的最新脚本是

<script type="text/javascript">
$(document).ready(function() {
    $('.listheck').click(function(){
        var thisID    = $(this).attr('id');
        var checked = $('#'+thisID+':checkbox:checked').length;
        alert(thisID+" Number checked:" + checked);
    }); 
});
</script>

警报显示复选框的ID,但即使检查了

,选中的值也始终为0

我知道每个元素id应该是唯一的,这可能是问题,或者可能是id中有空格但是这是用于已经由其他人开发的系统,不幸的是我无法改变方式它有效。

我在这里尝试了很多不同的解决方案,但似乎没有人做我需要的。

任何帮助表示赞赏

4 个答案:

答案 0 :(得分:1)

ID应该是唯一的。但如果你不能改变代码,这应该有效:

$(document).ready(function() {
    $('.listheck').click(function(){
        var checkedTotal = {};
        $(".listheck").each(function(index, el) {
            var id = $(el).attr("id");
            if ( $(el).prop("checked") ) {
                if ( !checkedTotal[id] ) {
                    checkedTotal[id] = 1;
                }
                else {
                    checkedTotal[id] = checkedTotal[id]+1;
                }
            }
        });
        var msg = "";
        for ( var p in checkedTotal ) {
            msg += p + " # Checked: " + checkedTotal[p] + "\n";
        }
        alert(msg);
    }); 
});

答案 1 :(得分:0)

而不是通过id查找。尝试找到将这些复选框分组的其他内容。尝试通过name属性而不是id进行查找。根据规范,Jquery正在使用一个js方法,它只期望一个元素具有特定的id。所以它可能只返回第一个。如果无法修复结构,请使用id以外的其他选择器。

答案 2 :(得分:0)

该代码仅检查具有给定id的第一个元素(因为id对于元素是唯一的)。 实际上,如果您尝试here,则会得到当前只选中一个复选框的结果。

您可以使用.each方法循环浏览所有当前选中的复选框,并计算其中有多少具有给定的id

$(document).ready(function() {
$('.listheck').click(function(){
    var thisID    = $(this).attr('id');
    var checked = 0;
    $('.listheck:checked').each(function(index, val) {
        if ($(this).attr('id') == thisID) {
            checked++;
        }
    });
    alert(checked + ' checkbox with id ' + thisID + ' are checked');
    }); 
});

查看工作示例here

答案 3 :(得分:0)

$('[id="AB1 OB 90xs r5Ty"]').length