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.

Matthew 'obrigatório' Bryant
fonte
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;
      }
}
Engenheiro
fonte
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.

JanBorup
fonte
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.

user1683014
fonte
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);
    }
}
Stano
fonte
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">

Marinha do Nascimento
fonte
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})
Joe Iddon
fonte
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.

jackJoe
fonte
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);
}
Estrangeiro
fonte
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)} />
Dave Clark
fonte
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>

especiaria
fonte
-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.

VanThaoNguyen
fonte
Uma maneira extremamente ineficiente de fazer isso.
AStopher 3/02