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
Ravi
quelle
Ü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

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

Richard Garside
quelle
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

Rodgers
quelle
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);
    }
});
Crisalin Petrovschi
quelle
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

Michal R.
quelle
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!

Ruben Perez
quelle
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

Yasir Ijaz
quelle
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>

Rohan Kumar
quelle
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));
    }
  });
Code Spy
quelle
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
Rupak Das
quelle
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

Hussain
quelle
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
    }
});
Naiquevin
quelle
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

Matt Ball
quelle
1

Versuche dies,

<input type="checkbox" class="checkAll" onclick="$('input[type=checkbox][class=cb-element]').attr('checked',this.checked)">
Kautil
quelle
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')
});

Shaunak D.
quelle
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>

Pankaj Makwana
quelle
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 .

Foochow
quelle
0
$(function () {
    $('input#check_all').change(function () {
        $("input[name='input_ids[]']").prop('checked', $(this).prop("checked"));
    });
});
Rokibul Hasan
quelle
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

Hier ist ein Link, über den das übergeordnete Kontrollkästchen aktiviert und deaktiviert wird und alle untergeordneten Kontrollkästchen aktiviert und deaktiviert werden.

jquery check deaktiviert alle Kontrollkästchen mit Jquery With Demo

$(function () {
        $("#select-all").on("click", function () {
            var all = $(this);
            $('input:checkbox').each(function () {
                $(this).prop("checked", all.prop("checked"));
            });
        });
    });
Bharath Kumaar
quelle
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>
Bhushan Sangani
quelle
0

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

$('input:checkbox').attr('checked',false);
John
quelle
0
$(document).ready( function() {
        // Check All
        $('.checkall').click(function () {          
            $(":checkbox").attr("checked", true);
        });
        // Uncheck All
        $('.uncheckall').click(function () {            
            $(":checkbox").attr("checked", false);
        });
    });
Vicky
quelle
-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>
D4Y.be
quelle