Van egy táblázat oszlop tele dobozt. A tetején szeretnék, hogy egyetlen „Select All” négyzetet, amely ellenőrzi az összes négyzetet az oldalon.
Hogyan kell ezt megcsinálni? Én a jQuery, mint az én JavaScript keretrendszer, ha ez számít.
Van egy táblázat oszlop tele dobozt. A tetején szeretnék, hogy egyetlen „Select All” négyzetet, amely ellenőrzi az összes négyzetet az oldalon.
Hogyan kell ezt megcsinálni? Én a jQuery, mint az én JavaScript keretrendszer, ha ez számít.
jquery ( SZERKESZTETT válthat check / törölje az összes):
$(document).ready(function() {
$("#toggleAll").click(function() {
$("#chex :checkbox").attr("checked", $(this).attr("checked"));
});
});
Az ok, amiért meg kellett tennem egy click()majd ellenőrizze checkedaz állapot, mert ha megpróbálja „ toggle” a négyzetet, a négyzetet, hogy toggled nem megtartja ellenőrzött állapotát. Így megőrzi az állapot ellenőrzésére és hatékonyan bekapcsolja.
HTML:
<input type="checkbox" id="toggleAll" />
<div id="chex">
<input type="checkbox" />
<input type="checkbox" />
<input type="checkbox" />
<input type="checkbox" />
</div>
KingNestor:
Azt is lesz szüksége ezt a linket (ha még nem fedezte fel):
http: //www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysLists ...
Míg a választ küldte korábban fog működni, akkor befut kérdéseket, ha egynél több jelölőnégyzetet egy oldalon.
Ez a formátum fog működni függetlenül:
<table>
<thead>
<tr>
<th><input type="checkbox" /></th>
<th>Column 1</th>
<th>Column 2</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="checkbox" /></td>
<td>Tabular Data 1</td>
<td>Tabular Data 2</td>
</tr>
<tr>
<td><input type="checkbox" /></td>
<td>Tabular Data 3</td>
<td>Tabular Data 4</td>
</tr>
</tbody>
</table>
és a forgatókönyvet ...
$(function() {
$('th > :checkbox').click(function() {
$(this).closest('table')
.find('td > :checkbox')
.attr('checked', $(this).is(':checked'));
});
});
Kissé módosító jelölő származó Marve válasza (amely azonosítót a táblázatot)
EDIT:
A frissített verzió, ahol a „SelectAII” jelölőnégyzetet helyesen tükrözi az állam a dobozt. Ha például egymás jelölj kézzel SelectAII négyzetet hamarosan automatikusan ellenőrzik. Próbálja ki a demo megérteni a viselkedését.
Kód:
<table id='myTable'>
<thead>
<tr>
<th><input type="checkbox" /></th>
<th>Column 1</th>
<th>Column 2</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="checkbox" /></td>
<td>Tabular Data 1</td>
<td>Tabular Data 2</td>
</tr>
<tr>
<td><input type="checkbox" /></td>
<td>Tabular Data 3</td>
<td>Tabular Data 4</td>
</tr>
</tbody>
</table>
A jQuery lehet olyan egyszerű, mint ez:
$(document).ready(
function()
{
$('#myTable th input:checkbox').click(
function()
{
$('#myTable td input:checkbox').attr('checked', $(this).attr('checked'));
}
);
//The following code keeps the 'selectAll' checkbox in sync with
//the manual selection of the checkboxes by user. This is an additional usability feature.
$('#myTable tr input:checkbox').click(
function()
{
var checkedCount = $('#myTable td input:checkbox:checked').length;
var totalCount = $('#myTable td input:checkbox').length;
$('#myTable th input:checkbox').attr('checked', checkedCount === totalCount);
}
);
}
);
Ez fogja minden egyes négyzeteket ugyanaz, mint a „összes kijelölése” egy
$("#id-of-checkall-checkbox").click(function() {
$(".class-on-my-checkboxes").attr('checked', this.checked);
});
Ez marad a „összes kijelölése” egy szinkronban van-e vagy sem az egyes négyzeteket valójában minden ellenőrzött, vagy nem
$(".class-on-my-checkboxes").click(function() {
if (!this.checked) {
$("#id-of-checkall-checkbox").attr('checked', false);
}
else if ($(".class-on-my-checkboxes").length == $(".class-on-my-checkboxes:checked").length) {
$("#id-of-checkall-checkbox").attr('checked', true);
}
});
Próbáld ki ezt a HTML táblázatban.
<table class="rptcontenttext" style="width: 100%; border-style: solid; border-collapse: collapse"
border="1px" cellpadding="0" cellspacing="0">
<thead>
<tr>
<th style="text-align:left;width:10px;">
<input type="checkbox" value="true" name="chkVerifySelection" id="chkVerifySelection" onchange="return checkAllVerifySelection();" />
</th>
<td class="rptrowdata" align="left">
Employee ID
</td>
</tr>
</thead>
<tbody style="overflow-y: auto; overflow-x: hidden; max-height: 400px; width: 100%;">
@for (int i = 0; i < Model.EmployeeInformationList.Count; i++)
{
<tr>
<td style="width:10px">
@{
if (Model.EmployeeInformationList[i].SelectStatus==true)
{
@Html.CheckBoxFor(model => model.EmployeeInformationList[i].SelectStatus, new { @class = "VerifyStatus" ,disabled = "disabled",@checked="checked" })
}
else
{
@Html.CheckBoxFor(model => model.EmployeeInformationList[i].SelectStatus, new { @class = "VerifyStatus" })
}
}
</td>
<td class="rptrowdata" align="left" style="width: 70px">
@Html.Encode(Model.EmployeeInformationList[i].StrEmpID)
</td>
<td class="rptrowdata" align="center" style="width: 50px">
@Html.HiddenFor(m=>m.EmployeeInformationList[i].strEmpOldCardNo)
@Html.Encode(Model.EmployeeInformationList[i].strEmpOldCardNo)
</td>
</tr>
}
</tbody>
</table>
Forgatókönyv:
function checkAllVerifySelection() {
var flag = $('input[name=chkVerifySelection]').is(':checked');
if (flag) {
$(".VerifyStatus").each(function () {
$(this).attr('checked', true);
});
}
else {
$(".VerifyStatus").each(function () {
$(this).attr('checked', false);
});
}
return true;
}
Számomra Jeremy megoldás többnyire működött, de azt kellett cserélni .attr a .prop. Egyébként egyszer én egyszemélyes rákattintottam egy négyzetet akkor megáll reagálnak a „mester” jelölőnégyzetet.
A _Layout.cshtml (master oldal)
$(document).ready(
manageCheckboxGroup('chkAffectCheckboxGroup', 'checkbox-group')
);
Egy hivatkozott Js
function manageCheckboxGroup(masterCheckboxId, slaveCheckboxesClass) {
$("#" + masterCheckboxId).click(function () {
$("." + slaveCheckboxesClass).prop('checked', this.checked);
});
$("." + slaveCheckboxesClass).click(function () {
if (!this.checked) {
$("#" + masterCheckboxId).prop('checked', false);
}
else if ($("." + slaveCheckboxesClass).length == $("." + slaveCheckboxesClass + ":checked").length) {
$("#" + masterCheckboxId).prop('checked', true);
}
});
}
a HTML (Razor) oldal
<table class="table">
<thead>
<tr>
<th><input id="chkAffectCheckboxGroup" type="checkbox" checked="checked" /></th>
<th>
@Html.DisplayNameFor(model => model.Clients[0].ClientId)
</th>
<th>
@Html.DisplayNameFor(model => model.Clients[0].Name)
</th>
</tr>
</thead>
<tbody>
@for (int i = 0; i < Model.Clients.Count(); i++)
{
<tr>
<td>
<input type="hidden" asp-for="Clients[i].Id" class="form-control" />
<input type="hidden" asp-for="Clients[i].Name" />
<input type="checkbox" class="checkbox-group" asp-for="Clients[i].Selected" />
</td>
<td>
@Html.DisplayFor(modelItem => Model.Clients[i].Id)
</td>
<td>
@Html.DisplayFor(modelItem => Model.Clients[i].Name)
</td>
</tr>
}
</tbody>
</table>
FONTOS:
szintén az első volt egy @foreachhurok a HTML, és nem működik ..., akkor használja a @for (int i = 0; i < Model.Clients.Count(); i++)hurok helyett különben a végén egy üres listája OnPostAsync().