Como marcar todas as caixas de seleção usando jQuery?


118

Não sou especialista em jQuery, mas tentei criar um pequeno script para meu aplicativo. Quero marcar todas as caixas de seleção, mas não está funcionando corretamente.

Primeiro tentei usar attre depois tentei com, propmas estou fazendo algo errado.

Eu tentei isso primeiro:

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

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

Mas isso não funcionou.

Próximo: Funcionou melhor do que o código acima

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

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

Ambos os exemplos não funcionam.

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


possível duplicata de .prop () vs .attr ()
Liam


1
aqui está um link para meu codepen que faz exatamente este codepen.io/nickhq/pen/pZJVEr
Nixon Kosgei

Respostas:


294

Você precisa usar .prop () para definir a propriedade marcada

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

Demo: Fiddle


1
Uau, obrigado pela resposta rápida. Isso funciona bem, mas no meu aplicativo eu tenho um cheque falso. quando eu atualizo a página ctrl+re clico na caixa de seleção, checkAllele não me marca tudo. Depois disso, devo verificar novamente para ter sucesso. Então eu preciso clicar 2x no checkAllque não funciona no clique único (um)? Eu copio, colo esse código e faço a função checkAll()e na caixa de seleção que definoonclick="return checkAll()"
Ivan

3
Se você for usar jQuery, use jQuery. Não é uma boa ideia misturar jQuery com Javascript embutido. Por exemplo, isso é ruim: <elementtag id="someID" onclick="javascript code here"--- Em vez disso, use jQuery:$('#someID').click(function() { checkAll() });
cssyphus

4
Qual é a diferença entre o seu post esta resposta, por que usado not(this).prop?
shaijut de

1
@ArunPJohny, id deve ser único em uma única página, como podemos usar a mesma função usando o exemplo de classe jsfiddle.net/52uny55w
Krishna Jonnalagadda

@ArunPJohny, obrigado pelo seu tempo. Eu quero aprender muitas coisas com você no jquery, você pode me sugerir no jquery
Krishna Jonnalagadda

44

Basta usar a checkedpropriedade de checkAlle usar prop () em vez de attr para propriedade marcada

Demonstração ao vivo

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

Use prop () em vez de attr () para propriedades como verificado

A partir do jQuery 1.6, o método .attr () retorna indefinido para atributos que não foram definidos. Para recuperar e alterar as propriedades do DOM, como o estado verificado, selecionado ou desabilitado dos elementos do formulário, use o método .prop ()

Você tem o mesmo id para caixas de seleção e deve ser exclusivo . É melhor usar alguma classe com as caixas de seleção dependentes para que não inclua as caixas de seleção que você não deseja. Como $('input:checkbox')irá selecionar todas as caixas de seleção na página. Se sua página for estendida com novas caixas de seleção, elas também serão selecionadas / desmarcadas. Que pode não ser o comportamento pretendido.

Demonstração ao vivo

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

41

Uma solução completa está aqui.

$(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 deve ser:

Uma única caixa de seleção nas três caixas marcadas será marcada e desmarcada.

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

Espero que isso ajude alguém como ajudou a mim.

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


3
Eu gosto dessa solução, pois se você desmarcar uma das caixas, a caixa "Marcar Tudo" também fica desmarcada. Da mesma forma, se você marcar manualmente todas as caixas correspondentes, a caixa "Marcar tudo" também será marcada. Esse é um ótimo feedback da IU!
HPWD

Você pode tornar a $("#checkedAll").changefunção mais curta alterando-a para:var val = this.checked; $(".checkSingle").each( function() { this.checked=val; });
Gellie Ann

Além disso, acho melhor renomear a isAllCheckedvariável para isThereUncheckedou unCheckedassim será mais descritivo sobre o que a variável foi usada.
Gellie Ann

Peguei essa solução, é isso que estou procurando, obrigado
Ajay Kumar,

10

Eu acho que quando o usuário seleciona todas as caixas de seleção manualmente, todas as caixas de seleção devem ser marcadas automaticamente ou o usuário desmarca uma delas de todas as caixas de seleção selecionadas e, em seguida, todas as caixas devem ser desmarcadas automaticamente. aqui está meu código ..

$('#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


Obrigado! Eu prefiro isso porque depois de todas as caixas de seleção marcadas, ao desmarcarmos uma delas, a caixa de seleção de todas estará desmarcada.
Rizqi N. Assyaufi

7

Por que você não tenta isso (na 2ª linha onde 'form #' você precisa colocar o seletor apropriado do seu formulário html):

$('.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);
   })               
});

Seu html deve ser assim:

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

Espero que ajude.


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

Maneira mais simples que conheço:

$('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

Uma caixa de seleção para governar todos eles

Para as pessoas que ainda procuram um plug-in para controlar as caixas de seleção por meio de um que é leve, tem suporte imediato para UniformJS e iCheck e fica desmarcado quando pelo menos uma das caixas de seleção controladas está desmarcada (e é marcada quando todas as caixas de seleção controladas são marcadas curso) Eu criei um plugin jQuery checkAll .

Fique à vontade para verificar os exemplos na página de documentação .


Para este exemplo de pergunta, tudo que você precisa fazer é:

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

Isso não é claro e simples?


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

E jquery

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

1

Você pode executar .prop()os resultados de um Seletor jQuery diretamente, mesmo se ele retornar mais de um resultado. Assim:

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


0

Normalmente, você também deseja que a caixa de seleção mestre seja desmarcada se pelo menos 1 caixa de seleção escravo estiver desmarcada e seja marcada se todas as caixas de seleção escravo estiverem marcadas:

/**
 * 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');
    }
    });
}

E se você quiser habilitar qualquer controle (por exemplo, Remove Allbotão ou um Add Somethingbotão), quando pelo menos uma caixa de seleção estiver marcada e desabilitar quando nenhuma caixa de seleção estiver marcada:

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

Código jQuery

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

Ver demonstração

Clique aqui para ver a demonstração


0

use .prop () para obter o valor de uma propriedade

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

0

Eu sei que há muitas respostas postadas aqui, mas gostaria de postar isso para otimização de código e podemos usá-lo globalmente.

eu tentei o meu melhor

/*----------------------------------------
 *  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);
    });
}

Espero que isso ajude!


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

0

checkalléo id de todas as caixas de seleção e cb-child é o nome de cada caixa de seleção que será marcada e desmarcada depende do evento checkall click

$("#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

* SCRIPT JAVA PARA SELECIONAR TODAS AS CAIXAS DE VERIFICAÇÃO *

Melhor solução .. Experimente

<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

Você pode usar o código simples abaixo:

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

Exemplo para usar:

<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); 
}   

por favor mude a linha acima para

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

na resposta do SSR e está funcionando perfeitamente. Obrigado


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

Seria útil se você explicasse a resposta.
enkor,

se você marcar a caixa de seleção, todas as caixas de seleção serão marcadas como ID e, em seguida, você desmarcar a caixa de seleção e todas as caixas de seleção desmarcadas
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>

erro de script no código. o script precisa ser carregado primeiro.
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;
        }       
    }
}

Por que a função longa?
Jimmy Obonyo Abor

-2

Clique no gatilho

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

OU

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

OU

$("#checkAll").click(function(){
    $('input:checkbox').prop('checked', this.checked);
});
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.