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.