2011-10-20 43 views
0

我有一个可怕的问题,试图查看是否有任何使用某个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在其中有空格,但这是为已经开发的系统由别人和不幸的是我不能改变它的工作方式。

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

任何协助赞赏

+2

的ID都应该是独一无二的。使用类名称。例如:class =“listheck AB1” – Corneliu

+0

为什么多个元素具有相同的ID? –

+0

为什么你需要通过ID来查看它们?你已经有了被$(this)'点击过的元素。只要检查它是否被检查。 –

回答

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

而不是查找id。尝试找到其他组合这些复选框的其他内容。尝试通过name属性而不是id来查找。按照规范,jquery使用的js方法只希望一个元素具有特定的id。所以它可能只是返回第一个。如果您无法修复结构,请使用除id之外的其他选择器。

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

+0

谢谢你的完美。非常感谢你 – user1004967

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

你能解释一下你的解决方案吗? – NEER

+0

如果您想查找具有相同ID的复选框的数量,请使用标签[id =“”]。长度 警报示例: alert($('[id =“AB1 OB 90xs r5Ty”]')。length) ; 结果:4 –

相关问题