Den Wert des aktivierten Kontrollkästchens abrufen?

177

Ich habe also Code, der so aussieht:

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

Ich brauche nur Javascript, um den Wert des aktuell aktivierten Kontrollkästchens zu ermitteln.

BEARBEITEN : Zum Hinzufügen gibt es nur EIN Kontrollkästchen.

Matthew 'obligatorisch' Bryant
quelle
1
Sie benötigen Javascript-Code oder jQuery?
Andrey Vorobyev
6
Warum nicht das Optionsfeld verwenden?
PraveenVenu
Weil ich ein Plugin für eine Site schreibe
Matthew 'obligatorisch' Bryant
Wenn Sie nur ein Kontrollkästchen benötigen, warum verwenden Sie keine Optionsfelder? Dies ist die am besten geeignete UI-Komponente für diesen Job.
Tal Yaron
@TalYaron Können Sie ein Optionsfeld deaktivieren? Ich denke nicht ohne js code. Vielleicht möchte das OP die Auswahl der Box einfach aufheben.
R3tep

Antworten:

254

Für moderne Browser :

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

MitjQuery :

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

Reines Javascript ohnejQuery :

var checkedValue = null; 
var inputElements = document.getElementsByClassName('messageCheckbox');
for(var i=0; inputElements[i]; ++i){
      if(inputElements[i].checked){
           checkedValue = inputElements[i].value;
           break;
      }
}
Ingenieur
quelle
9
@Mageek Es ist eine schlechte Praxis, mehrere Elemente mit derselben ID zu versehen.
Ingenieur
@Engineer Nein, geben Sie einfach für jedes Kontrollkästchen eine andere ID ein.
Mageek
3
@Engineer "Bytes speichern", weil wir einfach schreiben müssen document.getElementById("foo").value();und "Berechnungen speichern", weil getElementByIdes sicherlich schneller als getElementsByTagNameund eine Schleife ist.
Mageek
9
für jQuery .is(":checked")ist der richtige Weg, da .val()der Attributwert zurückgegeben wird, wenn er definiert ist. Und selbst wenn er nicht definiert ist, gibt er "on" und keinen booleschen Wert zurück. jsfiddle.net/d5f7wnzu
Peter
1
document.querySelector('.messageCheckbox:checked').valuegeneriert TypeError, wenn kein Kontrollkästchen aktiviert ist
Meisner
260

Keiner der oben genannten Punkte hat bei mir funktioniert, aber verwenden Sie einfach Folgendes:

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

Viel Spaß beim Codieren.

JanBorup
quelle
Ich stimme zu. Sie haben bestätigt, was ich dachte. Ich möchte var chk1 = document.getElementById ('messageCheckbox') setzen; Auf diese Weise kann ich auf die Eigenschaften der Variablen "chk1" verweisen: aktiviert, aktiviert, Stil usw.
JustJohn
4
Woher hast du das id? Kannst du bitte Erklären? Der Typ, der die classin der Eingabe verwendete Frage gestellt hat . Es wird gut sein, wenn Sie den vollständigen Code bereitstellen können, damit ich verstehen kann, woher Sie denid
devfaysal
3
Dies kann mit dem von OP bereitgestellten Beispielcode nicht funktionieren ... Ich bin gespannt, warum es so viele positive Stimmen gab, ohne die Frage zu beantworten, obwohl eine schnelle Lösung es möglicherweise richtig macht.
Laurent S.
1
Können Sie Ihre vorgeschlagene Antwort bearbeiten, um zu erläutern, was dies bewirkt und wie es das OP anspricht?
Ro Yo Mi
2
@PradeepKumarPrabaharan Wahrscheinlich fragen sich Leute wie ich (die keine ID für mehrere Elemente verwenden), warum .value sie undefiniert gab.
111

Ich verwende dies in meinem Code. Versuchen Sie dies

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

Wenn das Kontrollkästchen aktiviert ist, xist es wahr, andernfalls ist es falsch.

user1683014
quelle
7
Dies beantwortet die Frage nicht, kann jedoch verwendet werden, um festzustellen, ob ein Kontrollkästchen aktiviert ist oder nicht. +1 da es mir immer noch geholfen hat.
Kevin Jurkowski
5
Beantwortet die Frage nicht, ist aber genau das, wonach ich gesucht habe.
Phn
Nützlich, wenn #checkboxeine Variable ist, z myCheckbox.
Optimae
15

in einfachem Javascript:

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
quelle
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
quelle
4

Dies beantwortet die Frage nicht direkt, kann aber zukünftigen Besuchern helfen.


Wenn eine Variable immer der aktuelle Status des Kontrollkästchens sein soll (anstatt den Status ständig überprüfen zu müssen), können Sie das onchangeEreignis ändern , um diese Variable festzulegen.

Dies kann im HTML erfolgen:

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

oder mit JavaScript:

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

Benutze das:

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

Dies setzt voraus, dass die zu überprüfenden Kontrollkästchen die Klasse "messageCheckbox" haben. Andernfalls müssten Sie überprüfen, ob die Eingabe vom Typ Kontrollkästchen ist usw.

JackJoe
quelle
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);
}
Außerirdischer
quelle
0

Wenn Sie Semantic UI React verwenden , datawird es als zweiter Parameter an das onChangeEreignis übergeben.

Sie können daher checkedwie folgt auf die Immobilie zugreifen :

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

Keines der oben genannten Verfahren hat bei mir funktioniert, ohne Fehler in die Konsole zu werfen, wenn das Kontrollkästchen nicht aktiviert war. Daher habe ich stattdessen etwas in diese Richtung getan (onclick und die Checkbox-Funktion werden nur für Demozwecke verwendet, in meinem Anwendungsfall ist es Teil von a viel größere Formularübermittlungsfunktion):

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>

würzen
quelle
-3

In meinem Projekt verwende ich normalerweise folgende Schnipsel:

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

Und es funktioniert gut. Mit bestem Gruß.

VanThaoNguyen
quelle
Ein äußerst ineffizienter Weg, dies zu tun.
AStopher