Testando se uma caixa de seleção está marcada com jQuery

588

Se a caixa de seleção estiver marcada, só preciso obter o valor como 1; caso contrário, preciso obtê-lo como 0. Como faço isso usando o jQuery?

$("#ans").val() sempre me dará um direito neste caso:

<input type="checkbox" id="ans" value="1" />
Rajeev
fonte
2
.val () é obter o atributo value, não o status de verificação. O atributo value pode ser qualquer coisa, não precisa ser booleano.
Pablo Pazos 16/11
se você ainda está por perto, você pode querer atualizar a resposta aceita para software moderno ... um monte de gente ainda vê esta questão
xaxxon

Respostas:

1008

Use .is(':checked')para determinar se está marcado ou não e defina seu valor de acordo.

Mais informações aqui.

Andy Mikula
fonte
1
Além disso, quando você faz $ ("# id"). Is ("marcada") em uma cláusula if, você será verdadeiro ou falso, não será ativado / desativado, por retorno e poderá enviá-lo para o script de backend e faça o que quiser.
Zanoldor
1
Provavelmente isso não importa hoje em dia: ReSharper (eu acho) emite um aviso " A pseudo-classe 'marcada' não é compatível com o Internet Explorer 8.0 ".
Uwe Keim 27/02
211
$("#ans").attr('checked') 

dirá se está marcado. Você também pode usar um segundo parâmetro true / false para marcar / desmarcar a caixa de seleção.

$("#ans").attr('checked', true);

Por comentário, use prop vez de attrquando disponível. Por exemplo:

$("#ans").prop('checked')
xaxxon
fonte
90

Apenas use $(selector).is(':checked')

Retorna um valor booleano.

SimionBaws
fonte
56
// use ternary operators
$("#ans").is(':checked') ? 1 : 0;
Stefan Brinkmann
fonte
@Loic para definir seu valor usando a sintaxe ternária concisa, por exemplo:: a = ischecked? 1: 0
21

A resposta de Stefan Brinkmann é excelente, mas incompleta para iniciantes (omite a atribuição de variável). Só para esclarecer:

// this structure is called a ternary operator
var cbAns = ( $("#ans").is(':checked') ) ? 1 : 0;

Funciona assim:

 var myVar = ( if test goes here ) ? 'ans if yes' : 'ans if no' ;

Exemplo:

var myMath = ( 1 > 2 ) ? 'yes' : 'no' ;
alert( myMath );

Alertas 'não'

Se isso for útil, por favor vote na resposta de Stefan Brinkmann.

crashwap
fonte
18

Você pode tentar isso:

$('#studentTypeCheck').is(":checked");
MAnoj Sarnaik
fonte
15

Encontrei o mesmo problema antes, espero que esta solução possa ajudá-lo. primeiro, adicione um atributo personalizado às suas caixas de seleção:

<input type="checkbox" id="ans" value="1" data-unchecked="0" />

escreva uma extensão jQuery para obter valor:

$.fn.realVal = function(){
    var $obj = $(this);
    var val = $obj.val();
    var type = $obj.attr('type');
    if (type && type==='checkbox') {
        var un_val = $obj.attr('data-unchecked');
        if (typeof un_val==='undefined') un_val = '';
        return $obj.prop('checked') ? val : un_val;
    } else {
        return val;
    }
};

use o código para obter o valor da caixa de seleção:

$('#ans').realVal();

você pode testar aqui

alphakevin
fonte
10
... porque jQuery é conhecido como "a gravação mais fazer menos" biblioteca
myshadowself
longa história que você foi longe JQUERY quer que o desenvolvedor escreva menos e faça mais. simples problema merecem solução simples
ShapCyber
sim, concordei, escreva menos, faça mais. você escreve a extensão uma vez e, pelo resto do tempo, chama apenas a API $ (someradio) .realVal (), não é necessário gravar uma extensão muitas vezes.
alphakevin
Você nem precisou escrever a extensão uma vez, esquece 'muitas vezes'! Oo
Coz
8
$('input:checkbox:checked').val();        // get the value from a checked checkbox
ninguém
fonte
7
<input type="checkbox" id="ans" value="1" />

Jquery: var test= $("#ans").is(':checked') e retorna verdadeiro ou falso.

Na sua função:

$test =($request->get ( 'test' )== "true")? '1' : '0';
Rajesh RK
fonte
6

Você também pode usar:

$("#ans:checked").length == 1;
Alnamrouti com tarifa
fonte
4

Usar:

$("#ans option:selected").val()
Senthil Kumar Bhaskaran
fonte
se não estiver selecionado, a primeira parte não retornará nada, certo?
Xaxxon
@Senthil, OP não está pedindo para obter o valor de uma caixa de seleção marcada, em vez return 1se estiver selecionada
Om Shankar
4
function chkb(bool){
if(bool)
return 1;
return 0;
}

var statusNum=chkb($("#ans").is(':checked'));

statusNum será igual a 1 se a caixa de seleção estiver marcada e 0 se não estiver.

EDIT: Você também pode adicionar o DOM à função.

function chkb(el){
if(el.is(':checked'))
return 1;
return 0;
}

var statusNum=chkb($("#ans"));
kmoney12
fonte
4

Recentemente, deparei-me com um caso em que precisava marcar o valor da caixa de seleção quando o usuário clicou no botão. A única maneira adequada de fazer isso é usar o prop()atributo

var ansValue = $("#ans").prop('checked') ? $("#ans").val() : 0;

isso funcionou no meu caso, talvez alguém precise.

Quando tentei, .attr(':checked')ele retornou, checkedmas queria um valor booleano e .val()retornou o valor do atributo value.

Robert
fonte
4

Existem várias opções existem como ....

 1. $("#ans").is(':checked') 
 2. $("#ans:checked")
 3. $('input:checkbox:checked'); 

Se todas essas opções retornarem true, você poderá definir o valor de maneira precisa.

Amit Maru
fonte
O primeiro deve ser (': marcado'), não funciona de outra forma.
Arie Livshin
2

Tente isto

$('input:checkbox:checked').click(function(){
    var val=(this).val(); // it will get value from checked checkbox;
})

Aqui a flag é verdadeira se marcada caso contrário false

var flag=$('#ans').attr('checked');

Novamente, isso fará com que cheked

$('#ans').attr('checked',true);
sharif2008
fonte
2
 $("#id").prop('checked') === true ? 1 : 0;
Paulo Rodrigues
fonte
0

Você pode obter valor (verdadeiro / falso) com esses dois métodos

$("input[type='checkbox']").prop("checked");
$("input[type='checkbox']").is(":checked");
PPB
fonte
0

Primeiro verifique se o valor está marcado

$("#ans").find("checkbox").each(function(){
    if ($(this).prop('checked')==true){ 
    var id = $(this).val()
    }
});

Caso contrário, defina o valor 0

Ashok Charu
fonte
0

Se você deseja que o valor inteiro seja marcado ou não, tente:

$("#ans:checked").length
Nasaralla
fonte
0

Você pode executá-lo desta maneira:

$('input[id=ans]').is(':checked');     
swathi
fonte