Uzyskaj wartość zaznaczonego pola wyboru?

177

Mam więc kod, który wygląda następująco:

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

Po prostu potrzebuję JavaScript, aby uzyskać wartość dowolnego pola wyboru, które jest obecnie zaznaczone.

EDYCJA : Aby dodać, będzie tylko JEDNO zaznaczone pole.

Matthew „obowiązkowy” Bryant
źródło
1
Potrzebujesz kodu javascript lub jQuery?
Andrey Vorobyev
6
Dlaczego nie użyć przycisku opcji?
PraveenVenu
Ponieważ piszę wtyczkę dla witryny
Matthew „obowiązkowy” Bryant
Jeśli potrzebujesz tylko jednego pola wyboru, dlaczego nie używasz przycisków opcji? jest to bardziej odpowiedni składnik interfejsu użytkownika do tego zadania.
Tal Yaron
@TalYaron Czy możesz odznaczyć przyciski radiowe? Myślę, że nie bez kodu js. Może OP chce łatwo odznaczyć pole.
R3tep

Odpowiedzi:

256

W przypadku nowoczesnych przeglądarek :

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

UżywającjQuery :

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

Czysty javascript bezjQuery :

var checkedValue = null; 
var inputElements = document.getElementsByClassName('messageCheckbox');
for(var i=0; inputElements[i]; ++i){
      if(inputElements[i].checked){
           checkedValue = inputElements[i].value;
           break;
      }
}
Inżynier
źródło
9
@Mageek dodawanie tego samego identyfikatora na wielu elementach jest złą praktyką.
Inżynier
@Engineer Nie, wystarczy umieścić inny identyfikator dla każdego pola wyboru.
Mageek
3
@Engineer "Oszczędzanie bajtów", ponieważ musimy po prostu pisać document.getElementById("foo").value();i "zapisywać obliczenia", ponieważ getElementByIdjest z pewnością szybszy niż getElementsByTagNamei pętla.
Mageek
9
dla jQuery .is(":checked")jest poprawnym sposobem, ponieważ .val()zwróci wartość atrybutu, jeśli jest zdefiniowana .. i nawet jeśli nie jest zdefiniowana, zwróci „on”, a nie wartość logiczną .. jsfiddle.net/d5f7wnzu
Peter
1
document.querySelector('.messageCheckbox:checked').valuegeneruje TypeError, jeśli żadne pole wyboru nie jest zaznaczone
Meisner
262

Żadne z powyższych nie działało dla mnie, ale po prostu użyj tego:

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

Miłego kodowania.

JanBorup
źródło
Zgadzam się. Potwierdziłeś, co myślałem. Lubię wstawiać var ​​chk1 = document.getElementById ('messageCheckbox'); W ten sposób mogę odwoływać się do właściwości zmiennej „chk1”: zaznaczone, włączone, styl itp.
JustJohn
4
Skąd to masz id? Czy możesz wyjaśnić? Facet, który zadał pytanie, classfaktycznie użył w wejściu. Będzie dobrze, jeśli podasz pełny kod, abym mógł zrozumieć, skąd maszid
devfaysal
3
To nie może działać z przykładowym kodem dostarczonym przez OP ... Jestem ciekaw, dlaczego otrzymał tak wiele głosów za, nie odpowiadając na pytanie, chociaż szybka poprawka może to naprawić.
Laurent S.
1
Czy możesz edytować proponowaną odpowiedź, aby rozwinąć, co to robi i jak odnosi się do PO?
Ro Yo Mi
2
@PradeepKumarPrabaharan prawdopodobnie ludzie tacy jak ja (nie używający identyfikatora dla wielu pozycji) zastanawiają się, dlaczego .value nadaje im undefinied.
111

Używam tego w moim kodzie. Spróbuj tego

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

Jeśli pole wyboru jest zaznaczone, xbędzie prawdziwe, w przeciwnym razie będzie fałszywe.

user1683014
źródło
7
Nie odpowiada to na pytanie, ale może służyć do określenia, czy pole wyboru jest zaznaczone, czy nie. +1, ponieważ to wciąż mi pomogło.
Kevin Jurkowski
5
Nie odpowiada na pytanie, ale jest dokładnie tym, czego szukałem.
phn
Przydatne, gdy #checkboxjest zmienną, np myCheckbox.
Optimae
15

w zwykłym 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
źródło
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
źródło
4

To nie jest bezpośrednią odpowiedzią na pytanie, ale może pomóc przyszłym odwiedzającym.


Jeśli chcesz, aby zmienna zawsze była bieżącym stanem pola wyboru (zamiast ciągłego sprawdzania jego stanu), możesz zmodyfikować onchangezdarzenie, aby ustawić tę zmienną.

Można to zrobić w HTML:

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

lub z JavaScript:

cb = document.getElementsByClassName('messageCheckbox')[0]
cb.addEventListener('change', function(){some_var = this.checked})
Joe Iddon
źródło
2

Użyj tego:

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

Zakłada się, że pola wyboru mają klasę „messageCheckbox”, w przeciwnym razie musiałbyś sprawdzić, czy wejście jest typu pola wyboru itp.

jackJoe
źródło
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);
}
Obcy
źródło
0

Jeśli używasz Semantic UI React , datajest przekazywany jako drugi parametr onChangezdarzenia.

Dlatego możesz uzyskać dostęp do checkednieruchomości w następujący sposób:

<Checkbox label="Conference" onChange={(e, d) => console.log(d.checked)} />
Dave Clark
źródło
0

Żadne z powyższych nie działało dla mnie bez zgłaszania błędów w konsoli, gdy pole nie było zaznaczone, więc zamiast tego zrobiłem coś w ten sposób (onclick i funkcja pola wyboru są używane tylko do celów demonstracyjnych, w moim przypadku jest to część znacznie większa funkcja przesyłania formularzy):

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>

przyprawa
źródło
-3

W moim projekcie zwykle używam tych fragmentów:

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

I działa dobrze. Pozdrowienia.

VanThaoNguyen
źródło
Niezwykle nieefektywny sposób na zrobienie tego.
AStopher