Wie kann ich mit jQuery alle Kontrollkästchen mit einer Schaltfläche aktivieren / deaktivieren?


158

Ich versuche, alle Kontrollkästchen mit jQuery zu aktivieren / deaktivieren. Durch Aktivieren / Deaktivieren des übergeordneten Kontrollkästchens werden nun alle untergeordneten Kontrollkästchen aktiviert / deaktiviert, und der Text des übergeordneten Kontrollkästchens wird in "Aktivieren / Deaktivieren" geändert.

Jetzt möchte ich das übergeordnete Kontrollkästchen durch eine Eingabeschaltfläche ersetzen und den Text auch auf der Schaltfläche in checkall / uncheckall ändern. Gibt es den Code, kann jemand bitte den Code optimieren?

    $( function() {
        $( '.checkAll' ).live( 'change', function() {
            $( '.cb-element' ).attr( 'checked', $( this ).is( ':checked' ) ? 'checked' : '' );
            $( this ).next().text( $( this ).is( ':checked' ) ? 'Uncheck All' : 'Check All' );
        });
        $( '.cb-element' ).live( 'change', function() {
            $( '.cb-element' ).length == $( '.cb-element:checked' ).length ? $( '.checkAll' ).attr( 'checked', 'checked' ).next().text( 'Uncheck All' ) : $( '.checkAll' ).attr( 'checked', '' ).next().text( 'Check All' );

        });
    });


   <input type="checkbox" class="checkAll" /> <b>Check All</b>

   <input type="checkbox" class="cb-element" /> Checkbox  1
   <input type="checkbox" class="cb-element" /> Checkbox  2
   <input type="checkbox" class="cb-element" /> Checkbox  3


Überprüfen Sie Tutorial mit jQuery freakyjolly.com/…
Code Spy

Antworten:


228

Probier diese :

$(document).ready(function(){
    $('.check:button').toggle(function(){
        $('input:checkbox').attr('checked','checked');
        $(this).val('uncheck all');
    },function(){
        $('input:checkbox').removeAttr('checked');
        $(this).val('check all');        
    })
})

DEMO


6
-1 als Toggle ist nicht dafür gedacht, so zu arbeiten: api.jquery.com/toggle (zumindest die aktuelle Version)
estani

2
Funktioniert nur für eine Taste, wenn Sie mehrere benötigen, ist es am besten zu verwenden.click()
Foochow

5
Heads up: Diese Antwort aktiviert buchstäblich jedes Kontrollkästchen in Ihrem Formular. Überspringen, es sei denn, Sie möchten das. Für mehrere Checkalls half mir diese Antwort: stackoverflow.com/a/27148382/3448554
Kelsey Hannan

1
Ich habe diesen Code ausprobiert, aber warum verschwindet mein Kontrollkästchen? xD und es hat eine "display: none"
-Eigenschaft

10
Mit den neuesten Versionen von jQuery .attr()und removeAttr()sollte nicht mit dem Attribut "geprüft" verwendet werden. As removeAttr()entfernt das Attribut, anstatt es auf zu setzen false. .prop('checked', true)oder .prop('checked', false)sollte stattdessen verwendet werden, wie in der Antwort @ richard-garside erläutert.
David Torres

110

Dies ist der kürzeste Weg, den ich gefunden habe (benötigt jQuery1.6 +)

HTML:

<input type="checkbox" id="checkAll"/>

JS:

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

Ich verwende .prop, da .attr für Kontrollkästchen in jQuery 1.6+ nicht funktioniert, es sei denn, Sie haben Ihrem Eingabe-Tag explizit ein markiertes Attribut hinzugefügt.

Beispiel-

$("#checkAll").change(function () {
    $("input:checkbox").prop('checked', $(this).prop("checked"));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<form action="#">
    <p><label><input type="checkbox" id="checkAll"/> Check all</label></p>
    
    <fieldset>
        <legend>Loads of checkboxes</legend>
        <p><label><input type="checkbox" /> Option 1</label></p>
        <p><label><input type="checkbox" /> Option 2</label></p>
        <p><label><input type="checkbox" /> Option 3</label></p>
        <p><label><input type="checkbox" /> Option 4</label></p>
    </fieldset>
</form>


Wie benutzt man diesen? Gibt es eine Chance, eine Geige zu sehen?
Drewdavid

1
Einfache Antwort, aber OP wollte einen Knopf
vphilipnyc

Wie können Sie auf diese Weise "alle abwählen"?
Michal Skop

@MichalSkop Dieser Code wählt aus oder ab, je nachdem, ob #checkAll aktiviert ist oder nicht. Wenn Sie alle deaktivieren möchten, können Sie einfach den Wert false wie folgt verwenden: $ ("input: checkbox"). Prop ('checked', false);
Richard Garside

Danke, sehr einfach!
viniciussvl

17

Probier diese:

HTML

<input type="checkbox" name="all" id="checkall" />

JavaScript

$('#checkall:checkbox').change(function () {
   if($(this).attr("checked")) $('input:checkbox').attr('checked','checked');
   else $('input:checkbox').removeAttr('checked');
});​

DEMO


Ja, danke, dieser Code ist perfekt, auch wenn er sich von DOM LEVEL ändert. Ich habe mich sehr bemüht zu programmieren, aber selbst ich habe andere Plugins ausprobiert, die ebenfalls nicht funktionieren. Dieses ist perfekt.
Rafee

14

Html

<input type="checkbox" name="select_all" id="select_all" class="checkAll" />

Javascript

    $('.checkAll').click(function(){
    if($(this).attr('checked')){
        $('input:checkbox').attr('checked',true);
    }
    else{
        $('input:checkbox').attr('checked',false);
    }
});

6
Verwenden Sie .prop anstelle von .attr, wenn Sie jQuery1.6 +
Richard Garside

5

Lösung zum Umschalten von Kontrollkästchen mithilfe einer Schaltfläche, kompatibel mit jQuery 1.9+, wenn Google-Event nicht mehr verfügbar ist :

$('.check:button').click(function(){
      var checked = !$(this).data('checked');
      $('input:checkbox').prop('checked', checked);
      $(this).val(checked ? 'uncheck all' : 'check all' )
      $(this).data('checked', checked);
});

DEMO


Ersetzte die Schaltfläche durch ein Kontrollkästchen und "Eingabe: Kontrollkästchen" durch eine Klasse für meine Zwecke, und das funktionierte großartig!
RationalRabbit

5

Versuche dies:

$('.checkAll').on('click', function(e) {
     $('.cb-element').prop('checked', $(e.target).prop('checked'));
});

eist das Ereignis, das generiert wird, wenn Sie dies tun click, und e.targetist das Element, auf das geklickt wird ( .checkAll), sodass Sie nur die Eigenschaft checkedvon Elementen mit Klasse .cb-elementwie die von Element mit Klasse .checkAll` einfügen müssen.

PS: Entschuldigen Sie mein schlechtes Englisch!


1
Hey Ruben, du solltest deiner Antwort einen Kommentar hinzufügen, damit das OP verstehen kann, wie du dieses Problem genau gelöst hast
edi9999

Vielen Dank für Ihre Hilfe @ edi9999, ich bin ein Anfänger
Ruben Perez

1
Diese Antwort ist IMO besser, da die akzeptierte Antwort alle Kontrollkästchen in Ihrem Formular aktiviert , während Sie mit Ihrem Muster problemlos auf verschiedene HTML-Formulare $ ("# id") oder $ (". Class") abzielen können . über ein Muster wie $('#all_news_items').on('click', function(e) { $('.news-item-option').prop('checked', $(e.target).prop('checked')); }); ohne Checkall ausrichten können Funktionen, die andere Formularelemente stören, so dass Sie einfach einen neuen Checkall hinzufügen können:$('#all_specializations').on('click', function(e) { $('.specialization-option').prop('checked', $(e.target).prop('checked')); });
Kelsey Hannan

4

Sie können dies versuchen

    $('.checkAll').on('click',function(){
        $('.checkboxes').prop('checked',$(this).prop("checked"));
    });`

Klasse .checkAllist ein Kontrollkästchen, das die Massenaktion steuert


3

Stimmt mit Richard Garsides kurzer Antwort überein, aber anstatt prop()in zu verwenden $(this).prop("checked"), können Sie die native JS- checkedEigenschaft des Kontrollkästchens verwenden, wie z.

$("#checkAll").change(function () {
    $("input:checkbox").prop('checked', this.checked);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<form action="#">
    <p><label><input type="checkbox" id="checkAll"/> Check all</label></p>
    
    <fieldset>
        <legend>Loads of checkboxes</legend>
        <p><label><input type="checkbox" /> Option 1</label></p>
        <p><label><input type="checkbox" /> Option 2</label></p>
        <p><label><input type="checkbox" /> Option 3</label></p>
        <p><label><input type="checkbox" /> Option 4</label></p>
    </fieldset>
</form>


3

Aktivieren / Deaktivieren Sie Alle mit Intermediate-Eigenschaft mit jQuery

Abgerufene Elemente im Array mit der Methode getSelectedItems () abrufen

Quell- Checkbox-Liste Alle mit unbestimmtem Master-Check auswählen / abwählen

Geben Sie hier die Bildbeschreibung ein

HTML

<div class="container">
  <div class="card">
    <div class="card-header">
      <ul class="list-group list-group-flush">
        <li class="list-group-item">
          <input
            class="form-check-input"
            type="checkbox"
            value="selectAll"
            id="masterCheck"
          />
          <label class="form-check-label" for="masterCheck">
            Select / Unselect All
          </label>
        </li>
      </ul>
    </div>
    <div class="card-body">
      <ul class="list-group list-group-flush" id="list-wrapper">
        <li class="list-group-item">
          <input
            class="form-check-input"
            type="checkbox"
            value="item1"
            id="item1"
          />
          <label class="form-check-label" for="item1">
            Item 1
          </label>
        </li>
        <li class="list-group-item">
          <input
            class="form-check-input"
            type="checkbox"
            value="item2"
            id="item2"
          />
          <label class="form-check-label" for="item2">
            Item 2
          </label>
        </li>
        <li class="list-group-item">
          <input
            class="form-check-input"
            type="checkbox"
            value="item3"
            id="item3"
          />
          <label class="form-check-label" for="item3">
            Item 3
          </label>
        </li>
        <li class="list-group-item">
          <input
            class="form-check-input"
            type="checkbox"
            value="item4"
            id="item4"
          />
          <label class="form-check-label" for="item4">
            Item 4
          </label>
        </li>
        <li class="list-group-item">
          <input
            class="form-check-input"
            type="checkbox"
            value="item5"
            id="item5"
          />
          <label class="form-check-label" for="item5">
            Item 5
          </label>
        </li>
        <li class="list-group-item" id="selected-values"></li>
      </ul>
    </div>
  </div>
</div>

jQuery

  $(function() {
    // ID selector on Master Checkbox
    var masterCheck = $("#masterCheck");
    // ID selector on Items Container
    var listCheckItems = $("#list-wrapper :checkbox");

    // Click Event on Master Check
    masterCheck.on("click", function() {
      var isMasterChecked = $(this).is(":checked");
      listCheckItems.prop("checked", isMasterChecked);
      getSelectedItems();
    });

    // Change Event on each item checkbox
    listCheckItems.on("change", function() {
      // Total Checkboxes in list
      var totalItems = listCheckItems.length;
      // Total Checked Checkboxes in list
      var checkedItems = listCheckItems.filter(":checked").length;

      //If all are checked
      if (totalItems == checkedItems) {
        masterCheck.prop("indeterminate", false);
        masterCheck.prop("checked", true);
      }
      // Not all but only some are checked
      else if (checkedItems > 0 && checkedItems < totalItems) {
        masterCheck.prop("indeterminate", true);
      }
      //If none is checked
      else {
        masterCheck.prop("indeterminate", false);
        masterCheck.prop("checked", false);
      }
      getSelectedItems();
    });

    function getSelectedItems() {
      var getCheckedValues = [];
      getCheckedValues = [];
      listCheckItems.filter(":checked").each(function() {
        getCheckedValues.push($(this).val());
      });
      $("#selected-values").html(JSON.stringify(getCheckedValues));
    }
  });

2

Beste Lösung hier Check Fiddle

$("#checkAll").change(function () {
    $("input:checkbox.cb-element").prop('checked', $(this).prop("checked"));
});
$(".cb-element").change(function () {
        _tot = $(".cb-element").length                        
        _tot_checked = $(".cb-element:checked").length;

        if(_tot != _tot_checked){
            $("#checkAll").prop('checked',false);
        }
});
<input type="checkbox" id="checkAll"/> ALL

<br />

<input type="checkbox" class="cb-element" /> Checkbox  1
<input type="checkbox" class="cb-element" /> Checkbox  2
<input type="checkbox" class="cb-element" /> Checkbox  3

2

Der folgende Code funktioniert, wenn der Benutzer alle Kontrollkästchen aktiviert und dann das Kontrollkästchen Alle aktiviert ist. Wenn der Benutzer ein Kontrollkästchen deaktiviert, wird das Kontrollkästchen Alle deaktiviert deaktiviert.

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

$(".cb-element").change(function () {
  if($(".cb-element").length==$(".cb-element:checked").length)
    $("#checkall").prop('checked', true);
  else
    $("#checkall").prop('checked', false);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/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


1

Versuche dies

$(".checkAll").click(function() {
    if("checkall" === $(this).val()) {
         $(".cb-element").attr('checked', true);
         $(this).val("uncheckall"); //change button text
    }
    else if("uncheckall" === $(this).val()) {
         $(".cb-element").attr('checked', false);
         $(this).val("checkall"); //change button text
    }
});

Ich habe dein Skript ausprobiert, aber kein Glück. Kannst du das bitte sehen, ob ich richtig implementiert habe oder nicht ..? Demo
Ravi

1

Schamlose Eigenwerbung: Dafür gibt es ein jQuery-Plugin .

HTML:

<form action="#" id="myform">
    <div><input type="checkbox" id="checkall"> <label for="checkall"> Check all</label></div>
    <fieldset id="slaves">
        <div><label><input type="checkbox"> Checkbox</label></div>
        <div><label><input type="checkbox"> Checkbox</label></div>
        <div><label><input type="checkbox"> Checkbox</label></div>
        <div><label><input type="checkbox"> Checkbox</label></div>
        <div><label><input type="checkbox"> Checkbox</label></div>
    </fieldset>
</form>

JS:

$('#checkall').checkAll('#slaves input:checkbox', {
    reportTo: function () {
        var prefix = this.prop('checked') ? 'un' : '';
        this.next().text(prefix + 'check all');
    }
});​

...und du bist fertig.

http://jsfiddle.net/mattball/NrM2P


1

Versuche dies,

<input type="checkbox" class="checkAll" onclick="$('input[type=checkbox][class=cb-element]').attr('checked',this.checked)">

1

Mit können Sie this.checkedden aktuellen Status des Kontrollkästchens überprüfen.

$('.checkAll').change(function(){
    var state = this.checked; //checked ? - true else false

    state ? $(':checkbox').prop('checked',true) : $(':checkbox').prop('checked',false);

    //change text
    state ? $(this).next('b').text('Uncheck All') : $(this).next('b').text('Check All')
});


1

Versuchen Sie den folgenden Code, um alle Kontrollkästchen zu aktivieren / deaktivieren

jQuery(document).ready(function() {
    $("#check_uncheck").change(function() {
        if ($("#check_uncheck:checked").length) {
            $(".checkboxes input:checkbox").prop("checked", true);
        } else {
            $(".checkboxes input:checkbox").prop("checked", false);
        }
    })
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input type="checkbox" name="check_uncheck" id="check_uncheck" /> Check All/Uncheck All
<br/>
<br/>
<div class="checkboxes">
    <input type="checkbox" name="check" id="check" /> Check Box 1
    <br/>
    <input type="checkbox" name="check" id="check" /> Check Box 2
    <br/>
    <input type="checkbox" name="check" id="check" /> Check Box 3
    <br/>
    <input type="checkbox" name="check" id="check" /> Check Box 4
</div>

Probieren Sie diesen Demo-Link aus

Es gibt auch einen anderen kurzen Weg, dies zu tun, siehe Beispiel unten. In diesem Beispiel ist das Kontrollkästchen Alle aktivieren / deaktivieren aktiviert oder nicht aktiviert. Wenn diese Option aktiviert ist, werden alle Kontrollkästchen aktiviert, und wenn nicht alle deaktiviert sind

$("#check_uncheck").change(function() {
    $(".checkboxes input:checkbox").prop("checked",$(this).is(':checked'));
})
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <input type="checkbox" name="check_uncheck" id="check_uncheck" /> Check All/Uncheck All
    <br/>
    <br/>
    <div class="checkboxes">
        <input type="checkbox" name="check" id="check" /> Check Box 1
        <br/>
        <input type="checkbox" name="check" id="check" /> Check Box 2
        <br/>
        <input type="checkbox" name="check" id="check" /> Check Box 3
        <br/>
        <input type="checkbox" name="check" id="check" /> Check Box 4
    </div>


0

Ich weiß, dass diese Frage alt ist, aber ich habe festgestellt, dass die meisten Leute ein Kontrollkästchen verwenden. Die akzeptierte Antwort verwendet eine Schaltfläche, kann jedoch nicht mit mehreren Schaltflächen arbeiten (z. B. eine oben auf Seite eins unten). Hier ist also eine Modifikation, die beides kann.

HTML

<a href="#" class="check-box-machine my-button-style">Check All</a>

jQuery

var ischecked = false;
$(".check-box-machine").click(function(e) {
    e.preventDefault();
    if (ischecked == false) {
        $("input:checkbox").attr("checked","checked");
        $(".check-box-machine").html("Uncheck All");
        ischecked = true;
    } else {
        $("input:checkbox").removeAttr("checked");
        $(".check-box-machine").html("Check All");
        ischecked = false;
    }
});

Auf diese Weise können Sie beliebig viele Schaltflächen verwenden, um Text- und Kontrollkästchenwerte zu ändern. Ich habe einen e.preventDefault()Anruf eingefügt, da dadurch die Seite aufgrund des href="#"Teils nicht mehr nach oben springen kann .


0
$(function () {
    $('input#check_all').change(function () {
        $("input[name='input_ids[]']").prop('checked', $(this).prop("checked"));
    });
});

Könnten Sie bitte eine Erklärung bearbeiten, warum dieser Code die Frage beantwortet? Nur-Code-Antworten werden nicht empfohlen, da sie die Lösung nicht vermitteln.
Scimonster


0
<script type="text/javascript">
    function myFunction(checked,total_boxes){ 
         for ( i=0 ; i < total_boxes ; i++ ){ 
           if (checked){   
             document.forms[0].checkBox[i].checked=true; 
            }else{  
             document.forms[0].checkBox[i].checked=false; 
            } 
        }   
    } 
</script>
    <body>
        <FORM> 
            <input type="checkbox" name="checkBox" >one<br> 
            <input type="checkbox" name="checkBox" >two<br> 
            <input type="checkbox" name="checkBox" >three<br> 
            <input type="checkbox" name="checkBox" >four<br> 
            <input type="checkbox" name="checkBox" >five<br> 
            <input type="checkbox" name="checkBox" >six<br> 
            <input type="checkbox" name="checkBox" >seven<br> 
            <input type="checkbox" name="checkBox" >eight<br> 
            <input type="checkbox" name="checkBox" >nine<br>
            <input type="checkbox" name="checkBox" >ten<br>  s
            <input type=button name="CheckAll" value="Select_All" onClick="myFunction(true,10)"> 
            <input type=button name="UnCheckAll" value="UnCheck All Boxes" onClick="myFunction(false,10)"> 
        </FORM> 
    </body>

0

Fügen Sie dies in Ihren Codeblock ein oder klicken Sie sogar auf Ihre Schaltfläche

$('input:checkbox').attr('checked',false);

0
$(document).ready( function() {
        // Check All
        $('.checkall').click(function () {          
            $(":checkbox").attr("checked", true);
        });
        // Uncheck All
        $('.uncheckall').click(function () {            
            $(":checkbox").attr("checked", false);
        });
    });

-1

Überprüfen Sie alle mit deaktivieren / überprüfen Sie den Controller, wenn alle Elemente aktiviert sind / nicht

JS:

e = Kontrollkästchen-ID t = Kontrollkästchen (Element) Klasse n = Kontrollkästchen Alle Klassen aktivieren

function checkAll(e,t,n){jQuery("#"+e).click(function(e){if(this.checked){jQuery("."+t).each(function(){this.checked=true;jQuery("."+n).each(function(){this.checked=true})})}else{jQuery("."+t).each(function(){this.checked=false;jQuery("."+n).each(function(){this.checked=false})})}});jQuery("."+t).click(function(e){var r=jQuery("."+t).length;var i=0;var s=0;jQuery("."+t).each(function(){if(this.checked==true){i++}if(this.checked==false){s++}});if(r==i){jQuery("."+n).each(function(){this.checked=true})}if(i<r){jQuery("."+n).each(function(){this.checked=false})}})}

HTML:

Überprüfen Sie ALLE Steuerklasse: chkall_ctrl

<input type="checkbox"name="chkall" id="chkall_up" class="chkall_ctrl"/>
<br/>
1.<input type="checkbox" value="1" class="chkall" name="chk[]" id="chk1"/><br/>
2.<input type="checkbox" value="2" class="chkall" name="chk[]" id="chk2"/><br/>
3.<input type="checkbox" value="3" class="chkall" name="chk[]" id="chk3"/><br/>
<br/>
<input type="checkbox"name="chkall" id="chkall_down" class="chkall_ctrl"/>

<script>
jQuery(document).ready(function($)
{
  checkAll('chkall_up','chkall','chkall_ctrl');
  checkAll('chkall_down','chkall','chkall_ctrl');
});
 </script>
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.