Wie aktiviere ich alle Kontrollkästchen mit jQuery?


118

Ich bin kein Experte für jQuery, aber ich habe versucht, ein kleines Skript für meine Anwendung zu erstellen. Ich möchte alle Kontrollkästchen aktivieren, aber es funktioniert nicht richtig.

Zuerst habe ich versucht zu benutzen attrund danach habe ich es versucht, propaber ich mache etwas falsch.

Ich habe es zuerst versucht:

$("#checkAll").change(function(){

  if (! $('input:checkbox').is('checked')) {
      $('input:checkbox').attr('checked','checked');
  } else {
      $('input:checkbox').removeAttr('checked');
  }       
});

Aber das hat nicht funktioniert.

Weiter: Dies funktionierte besser als der obige Code

$("#checkAll").change(function(){

  if (! $('input:checkbox').is('checked')) {
      $('input:checkbox').prop('checked',true);
  } else {
      $('input:checkbox').prop('checked', false);
  }       
});

Beide Beispiele funktionieren nicht.

JSFiddle: http://jsfiddle.net/hhZfu/4/


mögliches Duplikat von .prop () vs .attr ()
Liam


1
Hier ist ein Link zu meinem Codepen, der genau das tut. codepen.io/nickhq/pen/pZJVEr
Nixon Kosgei

Antworten:


293

Sie müssen .prop () verwenden , um die überprüfte Eigenschaft festzulegen

$("#checkAll").click(function(){
    $('input:checkbox').not(this).prop('checked', this.checked);
});

Demo: Geige


1
Wow danke für die schnelle Antwort. Das funktioniert gut, aber in meiner App habe ich einen falschen Scheck. Wenn ich die Seite aktualisiere ctrl+rund auf das Kontrollkästchen checkAllklicke, überprüft er mich nicht alle. Danach muss ich noch einmal überprüfen, um erfolgreich zu sein. Also brauche ich 2x Klick auf checkAllwas funktioniert nicht mit einem Klick (eins)? Ich kopiere, füge diesen Code ein und mache Funktion checkAll()und in Kontrollkästchen setze ichonclick="return checkAll()"
Ivan

3
Wenn Sie jQuery verwenden möchten, verwenden Sie jQuery. Es ist keine gute Idee, jQuery mit Inline-Javascript zu verwechseln. Zum Beispiel ist dies schlecht: <elementtag id="someID" onclick="javascript code here"--- Verwenden Sie stattdessen jQuery:$('#someID').click(function() { checkAll() });
cssyphus

4
Was ist der Unterschied zwischen Ihrem Beitrag diese Antwort, warum verwendet not(this).prop?
Shaijut

1
@ArunPJohny, ID sollte auf einer einzelnen Seite eindeutig sein, wie wir die gleiche Funktion unter Verwendung des Klassenbeispiels verwenden können jsfiddle.net/52uny55w
Krishna Jonnalagadda

@ArunPJohny, danke für deine Zeit. Ich möchte viele Dinge von Ihnen auf jquery lernen, können Sie mich auf jquery vorschlagen
Krishna Jonnalagadda

44

Verwenden Sie einfach die checkedEigenschaft von checkAllund verwenden Sie prop () anstelle von attr für die überprüfte Eigenschaft

Live-Demo

 $('#checkAll').click(function () {    
     $('input:checkbox').prop('checked', this.checked);    
 });

Verwenden Sie prop () anstelle von attr () für Eigenschaften wie aktiviert

Ab jQuery 1.6 gibt die Methode .attr () für nicht festgelegte Attribute undefiniert zurück. Verwenden Sie die Methode .prop (), um DOM-Eigenschaften wie den aktivierten, ausgewählten oder deaktivierten Status von Formularelementen abzurufen und zu ändern

Sie haben dieselbe ID für Kontrollkästchen und diese sollte eindeutig sein . Verwenden Sie besser eine Klasse mit den abhängigen Kontrollkästchen, damit sie nicht die Kontrollkästchen enthält, die Sie nicht möchten. As $('input:checkbox')aktiviert alle Kontrollkästchen auf der Seite. Wenn Ihre Seite um neue Kontrollkästchen erweitert wird, werden diese ebenfalls ausgewählt / nicht ausgewählt. Welches könnte nicht das beabsichtigte Verhalten sein.

Live-Demo

$('#checkAll').click(function () {    
    $(':checkbox.checkItem').prop('checked', this.checked);    
});

41

Eine Komplettlösung finden Sie hier.

$(document).ready(function() {
    $("#checkedAll").change(function() {
        if (this.checked) {
            $(".checkSingle").each(function() {
                this.checked=true;
            });
        } else {
            $(".checkSingle").each(function() {
                this.checked=false;
            });
        }
    });

    $(".checkSingle").click(function () {
        if ($(this).is(":checked")) {
            var isAllChecked = 0;

            $(".checkSingle").each(function() {
                if (!this.checked)
                    isAllChecked = 1;
            });

            if (isAllChecked == 0) {
                $("#checkedAll").prop("checked", true);
            }     
        }
        else {
            $("#checkedAll").prop("checked", false);
        }
    });
});

HTML sollte sein:

Ein einzelnes Kontrollkästchen bei aktivierten drei Kontrollkästchen wird aktiviert und deaktiviert.

<input type="checkbox" name="checkedAll" id="checkedAll" />

<input type="checkbox" name="checkAll" class="checkSingle" />
<input type="checkbox" name="checkAll" class="checkSingle" />
<input type="checkbox" name="checkAll" class="checkSingle" />

Hoffe das hilft jemandem wie mir.

JS Fiddle https://jsfiddle.net/52uny55w/


3
Ich mag diese Lösung, da, wenn Sie eines der Kontrollkästchen deaktivieren, das Kontrollkästchen "Alle aktivieren" ebenfalls deaktiviert wird. Wenn Sie alle entsprechenden Kontrollkästchen manuell aktivieren, wird auch das Kontrollkästchen "Alle aktivieren" aktiviert. Das ist tolles UI-Feedback dort!
HPWD

Sie können die $("#checkedAll").changeFunktion var val = this.checked; $(".checkSingle").each( function() { this.checked=val; });
verkürzen,

Ich denke auch, dass es besser ist, die isAllCheckedVariable in umzubenennen , isThereUncheckedoder unCheckeddass es aussagekräftiger ist, wofür die Variable verwendet wurde.
Gellie Ann

Ich habe diese Lösung gewählt, das ist es, wonach ich suche, danke
Ajay Kumar

9

Ich denke, wenn der Benutzer alle Kontrollkästchen manuell auswählt, sollte das Kontrollkästchen automatisch aktiviert werden, oder der Benutzer sollte eines von allen ausgewählten Kontrollkästchen deaktivieren, und das Kontrollkästchen sollte automatisch deaktiviert werden. Hier ist mein Code ..

$('#checkall').change(function () {
    $('.cb-element').prop('checked',this.checked);
});

$('.cb-element').change(function () {
 if ($('.cb-element:checked').length == $('.cb-element').length){
  $('#checkall').prop('checked',true);
 }
 else {
  $('#checkall').prop('checked',false);
 }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<input type="checkbox" name="all" id="checkall" />Check All</br>
<input type="checkbox" class="cb-element" /> Checkbox  1</br>
<input type="checkbox" class="cb-element" /> Checkbox  2</br>
<input type="checkbox" class="cb-element" /> Checkbox  3


Danke dir! Ich bevorzuge dies, weil, nachdem alle Kontrollkästchen aktiviert sind, wenn wir eines davon deaktivieren, alle Kontrollkästchen deaktiviert sind.
Rizqi N. Assyaufi

7

Warum versuchen Sie das nicht (in der zweiten Zeile, in der 'form #' Sie den richtigen Selektor für Ihr HTML-Formular eingeben müssen):

$('.checkAll').click(function(){
    $('form#myForm input:checkbox').each(function(){
        $(this).prop('checked',true);
   })               
});

$('.uncheckAll').click(function(){
    $('form#myForm input:checkbox').each(function(){
        $(this).prop('checked',false);
   })               
});

Ihr HTML sollte so sein:

<form id="myForm">
      <span class="checkAll">checkAll</span>
      <span class="uncheckAll">uncheckAll</span>
      <input type="checkbox" class="checkSingle"></input>
      ....
</form>

Ich hoffe das hilft.


5

HTML:

<p><input type="checkbox" id="parent" /> Check/Uncheck All</p>
<ul>
  <li>
    <input type="checkbox" class="child" /> Checkbox 1</li>
  <li>
    <input type="checkbox" class="child" /> Checkbox 2</li>
  <li>
    <input type="checkbox" class="child" /> Checkbox 3</li>
</ul>

jQuery:

$(document).ready(function() {
  $("#parent").click(function() {
    $(".child").prop("checked", this.checked);
  });

  $('.child').click(function() {
    if ($('.child:checked').length == $('.child').length) {
      $('#parent').prop('checked', true);
    } else {
      $('#parent').prop('checked', false);
    }
  });
});

Demo: FIDDLE


4

Der einfachste Weg, den ich kenne:

$('input[type="checkbox"]').prop("checked", true);


2
$('#checkAll').on('change', function(){
    if($(this).attr('checked')){
        $('input[type=checkbox]').attr('checked',true);
    }
    else{
        $('input[type=checkbox]').removeAttr('checked');
    }
});

1

Ein Kontrollkästchen, um alle zu regieren

Für Leute, die immer noch nach einem Plugin suchen, um Kontrollkästchen über ein leichtes zu steuern, das sofort einsatzbereite Unterstützung für UniformJS und iCheck bietet und deaktiviert wird, wenn mindestens eines der kontrollierten Kontrollkästchen deaktiviert ist (und aktiviert wird, wenn alle kontrollierten Kontrollkästchen aktiviert sind Natürlich) Ich habe ein jQuery checkAll-Plugin erstellt .

Schauen Sie sich die Beispiele auf der Dokumentationsseite an .


Für dieses Fragenbeispiel müssen Sie lediglich Folgendes tun:

$( "#checkAll" ).checkall({
    target: "input:checkbox"
});

Ist das nicht klar und einfach?


1

Sie können .prop()die Ergebnisse eines jQuery Selector direkt ausführen, auch wenn mehr als ein Ergebnis zurückgegeben wird. So:

$("input[type='checkbox']").prop('checked', true)


0

Normalerweise möchten Sie auch, dass das Master-Kontrollkästchen deaktiviert ist, wenn mindestens 1 Slave-Kontrollkästchen deaktiviert ist, und dass das Kontrollkästchen aktiviert ist, wenn alle Slave-Kontrollkästchen aktiviert sind:

/**
 * Checks and unchecks checkbox-group with a master checkbox and slave checkboxes
 * @param masterId is the id of master checkbox
 * @param slaveName is the name of slave checkboxes
 */
function checkAll(masterId, slaveName) {
    $master = $('#' + masterId);
    $slave = $('input:checkbox[name=' + slaveName + ']');

    $master.click(function(){
        $slave.prop('checked', $(this).prop('checked'));
        $slave.trigger('change');
    });

    $slave.change(function() {
        if ($master.is(':checked') && $slave.not(':checked').length > 0) {
            $master.prop('checked', false);
        } else if ($master.not(':checked') && $slave.not(':checked').length == 0) {
        $master.prop('checked', 'checked');
    }
    });
}

Und wenn Sie ein Steuerelement aktivieren möchten (z. B. eine Remove AllSchaltfläche oder eine Add SomethingSchaltfläche), wenn mindestens ein Kontrollkästchen aktiviert ist, und deaktivieren, wenn kein Kontrollkästchen aktiviert ist:

/**
 * Checks and unchecks checkbox-group with a master checkbox and slave checkboxes,
 * enables or disables a control when a checkbox is checked
 * @param masterId is the id of master checkbox
 * @param slaveName is the name of slave checkboxes
 */
function checkAllAndSwitchControl(masterId, slaveName, controlId) {
    $master = $('#' + masterId);
    $slave = $('input:checkbox[name=' + slaveName + ']');

    $master.click(function(){
        $slave.prop('checked', $(this).prop('checked'));
        $slave.trigger('change');
    });

    $slave.change(function() {
        switchControl(controlId, $slave.filter(':checked').length > 0);
        if ($master.is(':checked') && $slave.not(':checked').length > 0) {
            $master.prop('checked', false);
        } else if ($master.not(':checked') && $slave.not(':checked').length == 0) {
        $master.prop('checked', 'checked');
    }
    });
}

/**
 * Enables or disables a control
 * @param controlId is the control-id
 * @param enable is true, if control must be enabled, or false if not
 */
function switchControl(controlId, enable) {
    var $control = $('#' + controlId);
    if (enable) {
        $control.removeProp('disabled');
    } else {
        $control.prop('disabled', 'disabled');
    }
}

0

HTML

<HTML>
<HEAD>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    <TITLE>Multiple Checkbox Select/Deselect - DEMO</TITLE>
</HEAD>
<BODY>
    <H2>Multiple Checkbox Select/Deselect - DEMO</H2>
<table border="1">
<tr>
    <th><input type="checkbox" id="selectall"/></th>
    <th>Cell phone</th>
    <th>Rating</th>
</tr>
<tr>
    <td align="center"><input type="checkbox" class="case" name="case" value="1"/></td>
    <td>BlackBerry Bold 9650</td>
    <td>2/5</td>
</tr>
<tr>
    <td align="center"><input type="checkbox" class="case" name="case" value="2"/></td>
    <td>Samsung Galaxy</td>
    <td>3.5/5</td>
</tr>
<tr>
    <td align="center"><input type="checkbox" class="case" name="case" value="3"/></td>
    <td>Droid X</td>
    <td>4.5/5</td>
</tr>
<tr>
    <td align="center"><input type="checkbox" class="case" name="case" value="4"/></td>
    <td>HTC Desire</td>
    <td>3/5</td>
</tr>
<tr>
    <td align="center"><input type="checkbox" class="case" name="case" value="5"/></td>
    <td>Apple iPhone 4</td>
    <td>5/5</td>
</tr>
</table>

</BODY>
</HTML>

jQuery-Code

<SCRIPT language="javascript">
$(function(){

    // add multiple select / deselect functionality
    $("#selectall").click(function () {
          $('.case').attr('checked', this.checked);
    });

    // if all checkbox are selected, check the selectall checkbox
    // and viceversa
    $(".case").click(function(){

        if($(".case").length == $(".case:checked").length) {
            $("#selectall").attr("checked", "checked");
        } else {
            $("#selectall").removeAttr("checked");
        }

    });
});
</SCRIPT>

Demo anzeigen

Klicken Sie hier, um die Demo anzuzeigen


0

Verwenden Sie .prop () , um den Wert einer Eigenschaft abzurufen

$("#checkAll").change(function () {
    $("input:checkbox").prop('checked', $(this).prop("checked"));
});

0

Ich weiß, dass es hier viele Antworten gibt, aber ich möchte diese zur Optimierung des Codes veröffentlichen und wir können sie global verwenden.

ich versuchte mein Bestes

/*----------------------------------------
 *  Check and uncheck checkbox which will global
 *  Params : chk_all_id=id of main checkbox which use for check all dependant, chk_child_pattern=start pattern of the remain checkboxes 
 *  Developer Guidline : For to implement this function Developer need to just add this line inside checkbox {{ class="check_all" dependant-prefix-id="PATTERN_WHATEVER_U_WANT" }}
 ----------------------------------------*/
function checkUncheckAll(chk_all_cls,chiled_patter_key){
    if($("."+chk_all_cls).prop('checked') == true){
        $('input:checkbox[id^="'+chiled_patter_key+'"]').prop('checked', 'checked');
    }else{
        $('input:checkbox[id^="'+chiled_patter_key+'"]').removeProp('checked', 'checked');
    }        
}

if($(".check_all").get(0)){
    var chiled_patter_key = $(".check_all").attr('dependant-prefix-id');

    $(".check_all").on('change',function(){        
        checkUncheckAll('check_all',chiled_patter_key);
    });

    /*------------------------------------------------------
     * this will remain checkbox checked if already checked before ajax call! :)
     ------------------------------------------------------*/
    $(document).ajaxComplete(function() {
        checkUncheckAll('check_all',chiled_patter_key);
    });
}

Ich hoffe das wird helfen!


0
    <p id="checkAll">Check All</p>
<hr />
<input type="checkbox" class="checkItem">Item 1
<input type="checkbox" class="checkItem">Item 2
<input type="checkbox" class="checkItem">Item3

Und jquery

$(document).on('click','#checkAll',function () {
     $('.checkItem').not(this).prop('checked', this.checked);
 });

0
function checkAll(class_name) {
    $("." + class_name).each(function () { 
        if (this.checked == true) 
            this.checked = false; 
        else 
            this.checked = true; 
    }); 
}

0

checkall ist die ID des Kontrollkästchens allbck und cb-child ist der Name jedes Kontrollkästchens, das abhängig vom Checkall-Klickereignis aktiviert und deaktiviert wird

$("#checkall").click(function () {
                        if(this.checked){
                            $("input[name='cb-child']").each(function (i, el) {
                                el.setAttribute("checked", "checked");
                                el.checked = true;
                                el.parentElement.className = "checked";

                            });
                        }else{
                            $("input[name='cb-child']").each(function (i, el) {
                                el.removeAttribute("checked");
                                el.parentElement.className = "";
                            });
                        }
                    });

0

* JAVA SCRIPT ZUR AUSWAHL ALLER CHECK BOX *

Beste Lösung .. Probieren Sie es aus

<script type="text/javascript">
        function SelectAll(Id) {
            //get reference of GridView control
            var Grid = document.getElementById("<%= GridView1.ClientID %>");
            //variable to contain the cell of the Grid
            var cell;

            if (Grid.rows.length > 0) {
                //loop starts from 1. rows[0] points to the header.
                for (i = 1; i < grid.rows.length; i++) {
                    //get the reference of first column
                    cell = grid.rows[i].cells[0];

                    //loop according to the number of childNodes in the cell
                    for (j = 0; j < cell.childNodes.length; j++) {
                        //if childNode type is CheckBox                 
                        if (cell.childNodes[j].type == "checkbox") {
                            //Assign the Status of the Select All checkbox to the cell checkbox within the Grid
                            cell.childNodes[j].checked = document.getElementById(Id).checked;
                        }
                    }
                }
            }
        }
    </script>

-1

Sie können unten einfachen Code verwenden:

function checkDelBoxes(pForm, boxName, parent)
{
    for (i = 0; i < pForm.elements.length; i++)
        if (pForm.elements[i].name == boxName)
            pForm.elements[i].checked = parent;
}

Anwendungsbeispiel:

<a href="javascript:;" onclick="javascript:checkDelBoxes($(this).closest('form').get(0), 'CheckBox[]', true);return false;"> Select All
</a>
<a href="javascript:;" onclick="javascript:checkDelBoxes($(this).closest('form').get(0), 'CheckBox[]', false);return false;"> Unselect All
</a>

-1
if(isAllChecked == 0)
{ 
    $("#select_all").prop("checked", true); 
}   

Bitte ändern Sie die obige Zeile in

if(isAllChecked == 0)
{ 
    $("#checkedAll").prop("checked", true); 
}   

in SSRs Antwort und es funktioniert perfekt Danke


-1
if($('#chk_all').is(":checked"))
 {
    $('#'+id).attr('checked', true);
 }
else
 {
    $('#'+id).attr('checked', false);
 }  

Wäre praktisch, wenn Sie die Antwort erklären würden.
Enkor

Wenn Sie das Kontrollkästchen aktiviert , dann alle Kontrollkästchen werden als ID geprüft und deaktivieren Sie das Kontrollkästchen dann alle Kontrollkästchen deaktiviert
Dsu Menaria


-1

html:

    <div class="col-md-3 general-sidebar" id="CategoryGrid">
                                                    <h5>Category &amp; Sub Category <span style="color: red;">* </span></h5>
                                                    <div class="checkbox">
                                                        <label>
                                                            <input onclick="checkUncheckAll(this)" type="checkbox">
                                                            All
                                                        </label>
                                                    </div>
                                                <div class="checkbox"><label><input class="cat" type="checkbox" value="Quality">Quality</label></div>
<div class="checkbox"><label><input class="subcat" type="checkbox" value="Planning process and execution">Planning process and execution</label></div>

Javascript:

function checkUncheckAll(ele) {
    if (ele.checked) {
        $('.cat').prop('checked', ele.checked);
        $('.subcat').prop('checked', ele.checked);
    }
    else {
        $('.cat').prop('checked', ele.checked);
        $('.subcat').prop('checked', ele.checked);
    }
}

-1
            <pre>
            <SCRIPT language="javascript">
            $(function(){
                // add multiple select / deselect functionality
                $("#selectall").click(function () {
                      $('.case').attr('checked', this.checked);
                });

                // if all checkbox are selected, check the selectall checkbox
                // and viceversa
                $(".case").click(function(){

                    if($(".case").length == $(".case:checked").length) {
                        $("#selectall").attr("checked", "checked");
                    } else {
                        $("#selectall").removeAttr("checked");
                    }

                });
            });
            </SCRIPT>
            <HTML>
            <HEAD>
            <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
            <TITLE>Multiple Checkbox Select/Deselect - DEMO</TITLE>
            </HEAD>
            <BODY>
            <H2>Multiple Checkbox Select/Deselect - DEMO</H2>
            <table border="1">
              <tr>
                <th><input type="checkbox" id="selectall"/></th>
                <th>Cell phone</th>
                <th>Rating</th>
              </tr>
              <tr>
                <td align="center"><input type="checkbox" class="case" name="case" value="1"/></td>
                <td>BlackBerry Bold 9650</td>
                <td>2/5</td>
              </tr>
              <tr>
                <td align="center"><input type="checkbox" class="case" name="case" value="2"/></td>
                <td>Samsung Galaxy</td>
                <td>3.5/5</td>
              </tr>
              <tr>
                <td align="center"><input type="checkbox" class="case" name="case" value="3"/></td>
                <td>Droid X</td>
                <td>4.5/5</td>
              </tr>
              <tr>
                <td align="center"><input type="checkbox" class="case" name="case" value="4"/></td>
                <td>HTC Desire</td>
                <td>3/5</td>
              </tr>
              <tr>
                <td align="center"><input type="checkbox" class="case" name="case" value="5"/></td>
                <td>Apple iPhone 4</td>
                <td>5/5</td>
              </tr>
            </table>
            </BODY>
            </HTML>
            </pre>

Skriptfehler im Code. Das Skript muss zuerst geladen werden.
Satish Shetty

-1
function chek_al_indi(id)
{
    var k = id;
    var cnt_descriptiv_indictr = eval($('#cnt_descriptiv_indictr').val());
    var std_cnt = 10;

    if ($('#'+ k).is(":checked"))
    {
        for (var i = 1; i <= std_cnt; i++)  
        {
            $("#chk"+ k).attr('checked',true);  
            k = k + cnt_descriptiv_indictr;
        }
    }

    if ($('#'+ k).is(":not(:checked)"))
    {
        for (var i = 1; i <= std_cnt; i++)  
        {
            $("#chk"+ k).attr('checked',false);     
            k = k + cnt_descriptiv_indictr;
        }       
    }
}

Warum die lange Funktion?
Jimmy Obonyo Abor

-2

Auslöser klicken

$("#checkAll").click(function(){
    $('input:checkbox').click();
});

ODER

$("#checkAll").click(function(){
    $('input:checkbox').trigger('click');
});

ODER

$("#checkAll").click(function(){
    $('input:checkbox').prop('checked', this.checked);
});
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.