Wie kann ich ein "Select All" Checkbox in meinem ASP.NET MVC-app implementieren?

stimmen
9

Ich habe eine Tabelle mit einer Spalte voller Kontrollkästchen. An der Spitze würde Ich mag eine einzige haben „Select All“ Kontrollkästchen, das alle Kontrollkästchen auf dieser Seite überprüfen würde.

Wie soll ich das umsetzen? Ich bin mit jQuery als meine JavaScript-Framework, wenn es darauf ankommt.

Veröffentlicht am 31/07/2009 um 18:42
quelle vom benutzer
In anderen Sprachen...                            


7 antworten

stimmen
4

jquery ( EDITED Prüfung umschalten / alle deaktivieren):

$(document).ready(function() {
    $("#toggleAll").click(function() {  
      $("#chex :checkbox").attr("checked", $(this).attr("checked"));
    });    
});

Der Grund , warum ich hatte ein zu tun , click()dann überprüfen checkedStatus ist , weil , wenn Sie versuchen, „ toggle“ eine Checkbox, die Checkbox umgeschaltet wird , wird seine überprüft Status beibehalten. Auf diese Weise den Prüfstatus behält und effektiv umschaltet.

HTML:

<input type="checkbox" id="toggleAll" />
<div id="chex">
    <input type="checkbox" />
    <input type="checkbox" />
    <input type="checkbox" />
    <input type="checkbox" />
</div>
Beantwortet am 31/07/2009 um 18:46
quelle vom benutzer

stimmen
0

KingNestor:

Sie werden auch auf diesen Link benötigen (wenn Sie nicht bereits entdeckt):

http: //www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysLists ...

Beantwortet am 31/07/2009 um 19:00
quelle vom benutzer

stimmen
1

Während die zuvor gebuchten Antworten arbeiten, werden Sie auf Probleme stoßen, wenn Sie mehr als einen Satz von Kontrollkästchen auf einer einzigen Seite haben.

Dieses Format funktioniert unabhängig:

<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>

und das Skript ...

$(function() {
    $('th > :checkbox').click(function() {
        $(this).closest('table')
            .find('td > :checkbox')
            .attr('checked', $(this).is(':checked'));
    });
});
Beantwortet am 31/07/2009 um 19:56
quelle vom benutzer

stimmen
1

Etwas Markup von Marve Antwort zu modifizieren (was ID in der Tabelle)

Arbeits Demo →

BEARBEITEN:

Aktualisierte Version, wo die ‚selectAll‘ Checkbox korrekt den Zustand des Kontrollkästchen widerspiegelt. Wenn Sie zB alle Kontrollkästchen manuell auswählen, wird selectAll Checkbox automatisch erhalten überprüft. Probieren Sie die Demo das Verhalten zu verstehen.

Code:

<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>

Ihre jQuery könnte so einfach sein wie dieses:

$(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);
            }
        );
    }
 );
Beantwortet am 31/07/2009 um 20:05
quelle vom benutzer

stimmen
10

Dies hält alle einzelnen Kontrollkästchen die gleiche wie die „alle auf“

$("#id-of-checkall-checkbox").click(function() {
    $(".class-on-my-checkboxes").attr('checked', this.checked);
});

Dies hält die „check all“ ein synchron mit, ob die einzelnen Kontrollkästchen sind alle tatsächlich kontrolliert oder nicht

$(".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);
    }
});
Beantwortet am 01/08/2009 um 07:49
quelle vom benutzer

stimmen
0

Versuchen Sie, diese für HTML-Tabelle.

<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>  

Skript:

 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;  
   } 
Beantwortet am 23/10/2014 um 11:06
quelle vom benutzer

stimmen
0

Für mich Jeremy Lösung meist gearbeitet, aber ich hatte zu ersetzen .attr mit .prop. Ansonsten , wenn ich auf einer Checkbox angeklickt Einzel wäre es zum „Master“ Checkbox reagieren zu stoppen.

im _Layout.cshtml (Masterseite)

$(document).ready(
    manageCheckboxGroup('chkAffectCheckboxGroup', 'checkbox-group')
);

in einer referenzierten 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);
        }
    });
}

im HTML (Razor) Seite

<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>

Wichtig: auch auf dem ersten hatte ich eine @foreachSchleife in der HTML und es hat nicht funktioniert ..., müssen Sie eine verwenden @for (int i = 0; i < Model.Clients.Count(); i++)Schleife statt sonst Sie mit einer leeren Liste in dem am Ende OnPostAsync().

Beantwortet am 06/08/2019 um 23:32
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more