2011-10-20 113 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 –

相關問題