[英]How to check a checkbox when all the checkboxes below it are checked?
我以這種方式動態地將 tr 和 td 添加到表中。
var arr=[1,2,3];
var trtest = "<tr>";
trtest = trtest +"<tr><td><input type='checkbox' onclick=onAllCheckBoxClick('" + arr+ "') class = 'all' id ='all'>All</td></tr>";
$.each(arr, function(i, tmp) {
trtest = trtest +"<tr><td><input type='checkbox' onclick=onCheckBoxClick('" + this+ "','" + arr+ "') class = 'all' id ='"+tmp+"'/>"+tmp+"</td></tr>";
});
此代碼正在運行,我以這種方式獲得 4 個復選框,
All
1
2
3
在這里,當我嘗試檢查單個子復選框的 1,2,3 時,必須選擇所有復選框。
我嘗試以這種方式將此點擊事件添加到每個復選框,
function onCheckBoxClick(checkBoxId,arr){
var chkselected = [];
$('#generateTable').find(':checkbox:checked').each(function() {
chkselected.push(this.id);
});
//
if (arr.split(",").length == chkselected.length && ($('#'+checkBoxId).is(':checked') == true)) {
$('#all').attr('checked',true);
}
//
else if (arr.split(",").length == chkselected.length && ($('#'+checkBoxId).is(':checked') == false)) {
$('#all').attr('checked',false);
}
}
問題是當我立即檢查 1,2 和最后 3 時所有復選框都被選中,
但是當我嘗試檢查 3,2 和 1 最后時,未選中所有復選框。
如果 1,2,3 被選中,我希望 All 被選中,如果 1,2,3 中的任何一個被取消選中,All 被取消選中。
我是 jQuery 的新手,所以有人可以幫助我解決這個問題嗎?
為“組”中的所有復選框分配相同的名稱,類似於您處理無線電輸入的方式。
然后為全選復選框分配相同的名稱並分配某種獨特的項目,以便您可以捕獲該單個項目上的點擊事件(在我的示例中,我使用了 role="selectall" 您可以使用任何您想要的)。
<input type="checkbox" id="checkAll" name="chkGroup1" role="selectall" />
<label for='checkAll'>Select All</label>
<br />
<input type='checkbox' id='checkbox1' name='chkGroup1' />
<label for='checkbox1'>product1</label>
<br />
<input type='checkbox' id='checkbox2' name='chkGroup1' />
<label for='checkbox2'>product2</label>
<br />
<input type='checkbox' id='checkbox3' name='chkGroup1' />
<label for='checkbox3'>product3</label>
<br />
<input type='checkbox' id='checkbox4' name='chkGroup1' />
<label for='checkbox4'>product4</label>
由於您已分配名稱,因此您可以將其用作 jQuery 選擇器,並將輸入的 checked 屬性分配給具有相同名稱的項目的測試。
$('input:checkbox[role=selectall]').click(function () {
$('[name="' + this.name + '"]').prop('checked', this.checked)
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.