jQuery veja se alguma ou nenhuma caixa de seleção está marcada

126

Eu sei como ver se uma caixa de seleção individual está marcada ou não.

Mas estou tendo problemas com o seguinte - dado um ID de formulário, preciso ver se alguma das caixas de seleção está marcada (ou seja, 1 ou mais) e preciso verificar se nenhuma está selecionada. Basicamente, preciso de duas funções separadas que respondam a essas duas perguntas. Ajuda seria apreciada. Obrigado!

Na verdade, eu precisaria apenas de uma função para me dizer se nenhuma está selecionada. Saber isso responderia à outra pergunta.

bba
fonte
relacionada stackoverflow.com/questions/901712/...
Adrien Seja

Respostas:

246

Você pode usar algo como isto

if ($("#formID input:checkbox:checked").length > 0)
{
    // any one is checked
}
else
{
   // none is checked
}
rahul
fonte
8
$("#formID input:checkbox:checked").lengthseria suficiente aqui também
Damon
@Damon Eu acho que você quis dizer if ($("#formID input:checkbox:checked").length){}(sem a >0) seria suficiente porque 0 é um valor Falsey, consulte james.padolsey.com/javascript/truthy-falsey
Adrien Seja
11
O jQuery diz sobre o :checkboxseletor: For better performance in modern browsers, use [type="checkbox"]consulte api.jquery.com/checkbox-selector - o mesmo para botões de opção de use [type="radio"] rather than :radio rádio
Adrien Seja
27

O JQuery .istestará todos os elementos especificados e retornará true se pelo menos um deles corresponder ao seletor:

if ($(":checkbox[name='choices']", form).is(":checked"))
{
    // one or more checked
}
else
{
    // nothing checked
}
Michael Logutov
fonte
Apesar de tudo is()parecer funcionar, ter :checkeddiretamente no seletor, conforme indicado na resposta de @ rahul, parece mais apropriado. is () parece mais útil quando "dentro de retornos de chamada", consulte api.jquery.com/is . Ou eu estou esquecendo de alguma coisa?
Adrien Seja
Não, é praticamente o que está escrito nos documentos - você verifica se um elemento está correspondendo ao atributo especificado. A aplicação é como filtro e, em seguida, verificando se você obtém pelo menos um item no resultado é o mesmo, mas imo mais longo e pouco expressivo.
Michael Logutov
+1 pelo fato de que .is(":checked")sua solução é mais expressiva, embora não tenha certeza do resto.
Adrien Seja
Ou seja, $("form input[type=checkbox]").is(":checked")pode ser uma abordagem mais simples e genérica.
Adrien Seja
O uso do @AdrienBe ispode ter um desempenho melhor, porque para assim que encontra um.
ChrisW
8

Você consegue fazer isso:

  if ($('#form_id :checkbox:checked').length > 0){
    // one or more checkboxes are checked
  }
  else{
   // no checkboxes are checked
  }

Onde:

  • :checkbox O seletor de filtro seleciona todas as caixas de seleção.
  • :checked selecionará caixas de seleção marcadas
  • length dará o número de marcados lá
Sarfraz
fonte
O jQuery diz sobre o :checkboxseletor :,For better performance in modern browsers, use [type="checkbox"] consulte api.jquery.com/checkbox-selector
Adrien Seja
6

Isto é o que eu usei para verificar se alguma caixa de seleção em uma lista de caixas de seleção foi alterada:

$('input[type="checkbox"]').change(function(){ 

        var itemName = $('select option:selected').text();  

         //Do something.

});     
James Drinkard
fonte
6

Sem usar 'length', você pode fazer assim:

if ($('input[type=checkbox]').is(":checked")) {
      //any one is checked
}
else {
//none is checked
}
Acheme Paul
fonte
3

Você pode fazer um retorno simples do .lengthaqui:

function areAnyChecked(formID) {
  return !!$('#'+formID+' input[type=checkbox]:checked').length;
}

Ele procura por caixas de seleção no formulário fornecido, vê se existem :checkede retorna truese forem (já que o comprimento seria 0 caso contrário). Para deixar um pouco mais claro, aqui está a versão convertida não booleana:

function howManyAreChecked(formID) {
  return $('#'+formID+' input[type=checkbox]:checked').length;
}

Isso retornaria uma contagem de quantos foram verificados.

Nick Craver
fonte
3

A resposta de Rahul é mais adequada para sua pergunta. De qualquer forma, se você tiver um grupo de caixas de seleção a serem verificadas e nem todas as caixas de seleção em seu formulário, poderá fazê-lo.

Coloque um nome de classe para todas as caixas de seleção que deseja marcar, digamos, por exemplo, um nome de classe test_checke agora você pode verificar se alguma das caixas de seleção está marcada pertencendo ao grupo:

$("#formID .test_check:checked").length > 0

Se retornar true, suponha que uma ou mais caixas de seleção estejam marcadas com o nome da classe test_checke nenhuma marcada se retornar false.

Espero que ajude alguém. Obrigado :)-

Rajesh Omanakuttan
fonte
1

Essa é a melhor maneira de resolver esse problema.

  if($("#checkbox").is(":checked")){

  // Do something here /////

  };
Asiamah Amos
fonte
Ei, bem-vindo ao StackOverflow. Talvez você possa descrever a sua resposta um pouco mais, pois não está claro por que é a "melhor maneira" de resolver o problema.
dddJewelsbbb 14/07