encontrar todas as caixas de verificação desmarcadas no jquery


197

Eu tenho uma lista de caixas de seleção:

<input type="checkbox" name="answer" id="id_1' value="1" />
<input type="checkbox" name="answer" id="id_2' value="2" />
...
<input type="checkbox" name="answer" id="id_n' value="n" />

Eu posso coletar todos os valores das caixas de seleção marcadas; minha pergunta é como obter todos os valores de caixas de seleção desmarcadas? Eu tentei:

$("input:unchecked").val();

para obter o valor de uma caixa de seleção desmarcada, mas obtive:

Erro de sintaxe, expressão não reconhecida: desmarcada.

alguém pode esclarecer essa questão? obrigado!



Respostas:


435

Como a mensagem de erro indica, o jQuery não inclui um :uncheckedseletor.
Em vez disso, você precisa inverter o :checkedseletor:

$("input:checkbox:not(:checked)")

4
E usar a entrada [type = checkbox] é mais rápido.
JClark

29

$("input:checkbox:not(:checked)") Você receberá as caixas desmarcadas.


10

Você pode fazer isso estendendo a funcionalidade do jQuerys. Isso diminuirá a quantidade de texto que você deve escrever para o seletor.

$.extend($.expr[':'], {
        unchecked: function (obj) {
            return ((obj.type == 'checkbox' || obj.type == 'radio') && !$(obj).is(':checked'));
        }
    }
);

Você pode usar $("input:unchecked")para obter todas as caixas de seleção e botões de opção marcados.


7

Também pode ser alcançado com js puros da seguinte maneira:

var matches = document.querySelectorAll('input[type="checkbox"]:not(:checked)');

3
$("input[type='checkbox']:not(:checked):not('\#chkAll\')").map(function () { 
   var a = ""; 
   if (this.name != "chkAll") { 
      a = this.name + "|off"; 
   } 
   return a; 
}).get().join();

Isso recuperará todas as caixas de seleção desmarcadas e excluirá a caixa de seleção "chkAll" que eu uso para marcar | desmarcar todas as caixas de seleção. Como quero saber qual valor estou passando para o banco de dados, desativei-o, pois as caixas de seleção me dão um valor ativado.

//looking for unchecked checkboxes, but don’t include the checkbox all that checks or unchecks all checkboxes
//.map - Pass each element in the current matched set through a function, producing a new jQuery object containing the return values.

//.get - Retrieve the DOM elements matched by the jQuery object.
//.join - (javascript) joins the elements of an array into a string, and returns the string.The elements will be separated by a specified separator. The default separator is comma (,).

2
Você não deve incluir algo em sua resposta que seja completamente irrelevante para o OP. Ele não usa uma chkAllcaixa, então qual é o objetivo de mencioná-la.
MMM 24/05

3

Você pode usar assim:

$(":checkbox:not(:checked)")

1

Para selecionar por class, você pode fazer o seguinte:

$("input.className:checkbox:not(:checked)")

0
$(".clscss-row").each(function () {
if ($(this).find(".po-checkbox").not(":checked")) {
               // enter your code here
            } });

1
Bem-vindo ao StackOverflow! Adicione uma explicação ao seu código, para que outros usuários (para quem possa ser o que eles estão procurando) saibam o que seu código faz.
Nander Speerstra
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.