Hvordan kan jeg gjennomføre en "Select All" boksen i min ASP.NET MVC app?

stemmer
9

Jeg har en tabell med en kolonne full av boksene. På toppen vil jeg gjerne ha en enkelt Select All boksen som ville sjekke alle boksene på den siden.

Hvordan skal jeg gjennomføre dette? Jeg bruker jQuery som Javascript rammeverk mitt hvis det betyr noe.

Publisert på 31/07/2009 klokken 17:42
kilden bruker
På andre språk...                            


7 svar

stemmer
4

jQuery ( EDITED å veksle sjekk / fjern merket alle):

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

Grunnen til at jeg måtte gjøre et click()så sjekk for checkedstatus er fordi hvis du prøver å " toggle" en boksen, blir den boksen slås ikke vil beholde sin sjekket status. På denne måten beholder sjekk status og effektivt veksler.

HTML:

<input type="checkbox" id="toggleAll" />
<div id="chex">
    <input type="checkbox" />
    <input type="checkbox" />
    <input type="checkbox" />
    <input type="checkbox" />
</div>
Svarte 31/07/2009 kl. 17:46
kilden bruker

stemmer
0

KingNestor:

Du er også kommer til å trenge denne linken (hvis du ikke allerede har oppdaget det):

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

Svarte 31/07/2009 kl. 18:00
kilden bruker

stemmer
1

Mens svarene postet tidligere vil fungere, vil du støte på problemer hvis du har mer enn ett sett av boksene i en enkelt side.

Dette formatet vil fungere uavhengig:

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

og manuset ...

$(function() {
    $('th > :checkbox').click(function() {
        $(this).closest('table')
            .find('td > :checkbox')
            .attr('checked', $(this).is(':checked'));
    });
});
Svarte 31/07/2009 kl. 18:56
kilden bruker

stemmer
1

Litt modifisering markering fra Marve svar (gi ID til bordet)

Working Demo →

REDIGERE:

Oppdatert versjon hvor 'velger' boksen inneholder riktige opplysninger om tilstanden i boksene. Hvis du for eksempel velge alle boksene manuelt, vil velger boksen automatisk få sjekket. Prøv demoen for å forstå oppførselen.

Kode:

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

Din jQuery kan være så enkelt som dette:

$(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);
            }
        );
    }
 );
Svarte 31/07/2009 kl. 19:05
kilden bruker

stemmer
10

Dette vil holde alle de individuelle boksene det samme som "check all" en

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

Dette vil holde "check all" en synkronisert med hvorvidt de enkelte boksene er faktisk all innsjekket eller ikke

$(".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);
    }
});
Svarte 01/08/2009 kl. 06:49
kilden bruker

stemmer
0

Prøv dette for HTML-tabell.

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

Manus:

 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;  
   } 
Svarte 23/10/2014 kl. 10:06
kilden bruker

stemmer
0

For meg, Jeremy løsning stort sett jobbet, men jeg måtte bytte ut .attr med .prop. Ellers når jeg singel klikket på en avkrysnings det ville stoppe å reagere på "master" boksen.

i _Layout.cshtml (master side)

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

i en referert 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);
        }
    });
}

i HTML (Razor) side

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

VIKTIG: også, først hadde jeg en @foreachloop i HTML, og det fungerte ikke ..., må du bruke en @for (int i = 0; i < Model.Clients.Count(); i++)løkke i stedet ellers du ende opp med en tom liste i OnPostAsync().

Svarte 06/08/2019 kl. 23:32
kilden bruker

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