在项目中Repeater嵌套Repeater查看详细信息。 并且第一个Repeater里面有个checkbox,第二个也有。实现效果是点击第一个Repeater的checbox就选中它详细信息里面的所有checkbox.
效果:
点击选中效果:(在点击可以取消)
只要有一个子项没有选中,则取消父checbox的选中状态:
JS代码:
// --列头全选框被单击---
function ChkAllClick(sonName, cbAllId)
{
var arrSon = document.getElementsByName(sonName);
var cbAll = document.getElementById(cbAllId);
var tempState = cbAll.checked;
for (i = 0; i < arrSon.length; i++)
{
if (arrSon[i].checked != tempState)
arrSon[i].click();
}
}
// --子项复选框被单击---
function ChkSonClick(sonName, clickson, cbAllId)
{
var arrSon = document.getElementsByName(sonName);
var ckSon = document.getElementById(clickson);
var cbAll = document.getElementById(cbAllId);
//子选项选中则列头全选框被选中 否则执行其他。
if (ckSon.checked == true)
{
cbAll.checked = true;
}
else {
for (var i = 0; i < arrSon.length; i++)
{
if (!arrSon[i].checked)
{
cbAll.checked = false;
return;
}
}
cbAll.checked = true;
}
}
aspx代码:
<asp:Repeater ID="rpStockManager" runat="server" >
<ItemTemplate>
<input type="checkbox" name="chkAll_<%#Eval("LocationID") %>" id="chkAll_<%#Eval("LocationID") %>"
onClick="ChkAllClick('chkSon_<%#Eval("LocationID") %>',
'chkAll_<%#Eval("LocationID") %>')"/>
<asp:Repeater ID="rpFluxStockDetail" runat="server">
<ItemTemplate>
<tr class='Listrow1' style="background-color:<%#(Container.ItemIndex%2==0)?"#CAE8EA":"#fff"%>;cursor: pointer">
<td style="width: 20px;" class="ListCellTitle">
<input type="checkbox" name="chkSon_<%#Eval("LocationID") %>" id='chkSon_<%#Eval("LotNum")%>'
οnclick="ChkSonClick('chkSon_<%#Eval("LocationID") %>', 'chkSon_<%#Eval("LotNum")%>',
'chkAll_<%#Eval("LocationID") %>')"
</td></tr>
/ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:Repeater>