Ottieni il valore della casella di controllo selezionata?


177

Quindi ho un codice simile al seguente:

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

Ho solo bisogno di Javascript per ottenere il valore di qualsiasi casella attualmente selezionata.

EDIT : Per aggiungere, ci sarà solo UNA casella selezionata.


1
Hai bisogno di codice javascript o jQuery?
Andrey Vorobyev,

6
Perché non usare il pulsante di opzione?
PraveenVenu,

Perché sto scrivendo un plugin per un sito
Matthew "obbligatorio" Bryant,

Se hai bisogno di una sola casella di controllo, perché non usi i pulsanti di opzione? questo è il componente dell'interfaccia utente più adatto per questo lavoro.
Tal Yaron,

@TalYaron Puoi deselezionare i pulsanti di opzione? Penso che non senza il codice js. Forse l'OP vuole deselezionare facilmente la casella.
R3tep,

Risposte:


256

Per i browser moderni :

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

UtilizzandojQuery :

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

Javascript puro senzajQuery :

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 è una cattiva pratica aggiungere lo stesso ID su più elementi.
Ingegnere,

@Engineer No, basta inserire un ID diverso per ogni casella di controllo.
Mageek,

3
@Engineer "Salvataggio di byte" perché dobbiamo semplicemente scrivere document.getElementById("foo").value();e "salvare i calcoli" perché getElementByIdè sicuramente più veloce di getElementsByTagNamee un ciclo.
Mageek,

9
per jQuery .is(":checked")è il modo corretto in quanto .val()restituirà il valore dell'attributo se definito .. e anche se non definito restituirà "on" e non un valore booleano .. jsfiddle.net/d5f7wnzu
Peter

1
document.querySelector('.messageCheckbox:checked').valuegenera TypeError se nessuna casella è selezionata
Meisner

262

Nessuno dei precedenti ha funzionato per me, ma semplicemente usa questo:

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

Buona codifica.


Concordo. Hai confermato quello che pensavo. Mi piace mettere var chk1 = document.getElementById ('messageCheckbox'); In questo modo posso fare riferimento alle proprietà della variabile "chk1": controllato, abilitato, stile, ecc.
JustJohn

4
Dove l'hai preso id? Puoi spiegare per favore? Il tizio che ha classeffettivamente posto la domanda utilizzata nell'input. Sarà bello se riesci a fornire il codice completo in modo che io possa capire da dove hai presoid
devfaysal

3
Questo non può funzionare con il codice di esempio fornito da OP ... Sono curioso di sapere perché ha ottenuto così tanti voti pur non rispondendo alla domanda, anche se una soluzione rapida potrebbe risolverla.
Laurent S.,

1
Puoi modificare la risposta proposta per ampliare ciò che fa e come si rivolge al PO?
Ro Yo Mi,

2
@PradeepKumarPrabaharan probabilmente le persone come me (che non usano l'ID per più elementi) chiedendosi perché .value le stesse dando undefinito.

111

Sto usando questo nel mio codice. Prova questo

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

Se la casella è selezionata xsarà vera, altrimenti sarà falsa.


7
Questo non risponde alla domanda, ma può essere usato per determinare se una casella è selezionata o meno. +1 poiché mi ha ancora aiutato.
Kevin Jurkowski il

5
Non risponde alla domanda ma è esattamente quello che stavo cercando.
phn,

Utile quando #checkboxè una variabile, ad es myCheckbox.
Optimae,

15

in javascript semplice:

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

Questo non risponde direttamente alla domanda, ma può aiutare i futuri visitatori.


Se si desidera che una variabile sia sempre lo stato corrente della casella di controllo (anziché dover continuare a controllarne lo stato), è possibile modificare l' onchangeevento per impostare quella variabile.

Questo può essere fatto in HTML:

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

o con JavaScript:

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

2

Usa questo:

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

Ciò presuppone che le caselle di controllo da controllare abbiano la classe "messageCheckbox", altrimenti dovresti fare un controllo se l'input è il tipo di casella di controllo, ecc.


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 si utilizza React dell'interfaccia utente semantica , dataviene passato come secondo parametro onChangeall'evento.

È quindi possibile accedere alla checkedproprietà come segue:

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

0

Nessuna delle precedenti ha funzionato per me senza generare errori nella console quando la casella non era selezionata, quindi ho fatto qualcosa lungo queste linee (onclick e la funzione checkbox sono utilizzate solo a scopo dimostrativo, nel mio caso d'uso fa parte di un funzione di invio modulo molto più grande):

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

Nel mio progetto, di solito uso questi frammenti:

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

E funziona bene. Distinti saluti.


Un modo estremamente inefficiente per farlo.
Più tardi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.