Obter o valor da caixa de seleção marcada?


177

Então, eu tenho um código que se parece com isso:

<input class="messageCheckbox" type="checkbox" value="3" name="mailId[]">
<input class="messageCheckbox" type="checkbox" value="1" name="mailId[]">

Eu só preciso de Javascript para obter o valor de qualquer caixa de seleção atualmente marcada.

EDIT : Para adicionar, haverá apenas uma caixa de seleção.


1
Você precisa de código javascript ou jQuery?
— Andrey Vorobyev

6
Por que não usar o botão de opção?
— PraveenVenu

Porque eu estou escrevendo um plugin para um site
— Matthew 'obrigatória' Bryant

Se você precisa de apenas uma caixa de seleção, por que não usa botões de opção? esse é o componente de interface do usuário mais adequado para este trabalho.
— Tal Yaron

@TalYaron Você pode desmarcar os botões de opção? Eu acho que não sem o código js. Talvez o OP queira desmarcar a caixa facilmente.
— R3tep

Respostas:


256

Para navegadores modernos :

var checkedValue = document.querySelector('.messageCheckbox:checked').value;

UsandojQuery :

var checkedValue = $('.messageCheckbox:checked').val();

Javascript puro semjQuery :

var checkedValue = null; 
var inputElements = document.getElementsByClassName('messageCheckbox');
for(var i=0; inputElements[i]; ++i){
      if(inputElements[i].checked){
           checkedValue = inputElements[i].value;
           break;
      }
}

9
@Mageek é uma prática ruim adicionar o mesmo ID em vários elementos.
— Engenheiro

@ Engineer Não, basta colocar um ID diferente para cada caixa de seleção.
— Mageek

3
@Engineer "Salvando bytes" porque precisamos simplesmente escrever document.getElementById("foo").value();e "salvar cálculos" porque getElementByIdé certamente mais rápido que getElementsByTagNameum loop.
— Mageek

9
para jQuery .is(":checked")é a maneira correta, pois .val()retornará o valor do atributo se for definido .. e mesmo se não for definido, ele retornará "on" e não um valor booleano. jsfiddle.net/d5f7wnzu
— Peter

1
document.querySelector('.messageCheckbox:checked').valuegera TypeError se nenhuma caixa de seleção estiver marcada
— Meisner

262

Nenhuma das opções acima funcionou para mim, mas simplesmente use isso:

document.querySelector('.messageCheckbox').checked;

Feliz codificação.


Eu concordo. Você confirmou o que eu pensava. Eu gosto de colocar var chk1 = document.getElementById ('messageCheckbox'); Dessa forma, posso referenciar as propriedades da variável "chk1": marcada, ativada, estilo etc.
— JustJohn

4
Onde você conseguiu isso id? Você pode explicar, por favor? O cara que fez a pergunta usada classna entrada realmente. Vai ser bom se você pode fornecer o código completo para que eu possa compreender de onde você tem oid
— devfaysal

3
Isso não pode funcionar com o código de exemplo fornecido pelo OP ... Estou curioso para saber por que houve tantos upvotes sem responder à pergunta, embora uma solução rápida possa torná-lo correto.
— Laurent S.

1
Você pode editar sua resposta proposta para expandir o que isso faz e como ela aborda o OP?
— Ro Yo Mi

2
@PradeepKumarPrabaharan provavelmente pessoas como eu (sem usar o id para vários itens) se perguntando por que .value estava dando a eles indefinidos.

111

Estou usando isso no meu código.Tente isso

var x=$("#checkbox").is(":checked");

Se a caixa de seleção estiver marcada x, será verdadeira, caso contrário, será falsa.


7
Isso não responde à pergunta, mas pode ser usado para determinar se uma caixa de seleção está marcada ou não. +1, pois ainda me ajudou.
— precisa saber é o seguinte

5
Não responde à pergunta, mas é exatamente o que eu estava procurando.
— phn

Útil quando #checkboxé uma variável, por exemplo myCheckbox.
— Optimae

15

em javascript simples:

function test() {
    var cboxes = document.getElementsByName('mailId[]');
    var len = cboxes.length;
    for (var i=0; i<len; i++) {
        alert(i + (cboxes[i].checked?' checked ':' unchecked ') + cboxes[i].value);
    }
}
function selectOnlyOne(current_clicked) {
    var cboxes = document.getElementsByName('mailId[]');
    var len = cboxes.length;
    for (var i=0; i<len; i++) {
        cboxes[i].checked = (cboxes[i] == current);
    }
}

4

$(document).ready(function() {
  var ckbox = $("input[name='ips']");
  var chkId = '';
  $('input').on('click', function() {
    
    if (ckbox.is(':checked')) {
      $("input[name='ips']:checked").each ( function() {
   			chkId = $(this).val() + ",";
        chkId = chkId.slice(0, -1);
 	  });
       
       alert ( $(this).val() ); // return all values of checkboxes checked
       alert(chkId); // return value of checkbox checked
    }     
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input type="checkbox" name="ips" value="12520">
<input type="checkbox" name="ips" value="12521">
<input type="checkbox" name="ips" value="12522">


4

Isso não responde diretamente à pergunta, mas pode ajudar futuros visitantes.


Se você deseja que uma variável sempre seja o estado atual da caixa de seleção (em vez de precisar continuar verificando seu estado), você pode modificar o onchangeevento para definir essa variável.

Isso pode ser feito no HTML:

<input class='messageCheckbox' type='checkbox' onchange='some_var=this.checked;'>

ou com JavaScript:

cb = document.getElementsByClassName('messageCheckbox')[0]
cb.addEventListener('change', function(){some_var = this.checked})

2

Usa isto:

alert($(".messageCheckbox").is(":checked").val())

Isso pressupõe que as caixas de seleção estejam com a classe "messageCheckbox"; caso contrário, você teria que verificar se a entrada é do tipo caixa de seleção, etc.


2
<input class="messageCheckbox" type="checkbox" onchange="getValue(this.value)" value="3" name="mailId[]">

<input class="messageCheckbox" type="checkbox" onchange="getValue(this.value)" value="1" name="mailId[]">
function getValue(value){
    alert(value);
}

0

Se você estiver usando o Semantic UI React , dataserá passado como o segundo parâmetro para o onChangeevento.

Portanto, você pode acessar a checkedpropriedade da seguinte maneira:

<Checkbox label="Conference" onChange={(e, d) => console.log(d.checked)} />

0

Nenhuma das opções acima funcionou para mim sem lançar erros no console quando a caixa não estava marcada, então eu fiz algo nesse sentido (onclick e a função checkbox estão sendo usadas apenas para fins de demonstração, no meu caso de uso faz parte de um função de envio de formulário muito maior):

function checkbox() {
  var checked = false;
  if (document.querySelector('#opt1:checked')) {
     checked = true;
  }
  document.getElementById('msg').innerText = checked;
}
<input type="checkbox" onclick="checkbox()" id="opt1"> <span id="msg">Click The Box</span>


-3

No meu projeto, eu geralmente uso esses trechos:

var type[];
$("input[name='messageCheckbox']:checked").each(function (i) {
                type[i] = $(this).val();
            });

E isso funciona bem. Os meus cumprimentos.


Uma maneira extremamente ineficiente de fazer isso.
— AStopher 3/02
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.