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.


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;
      }
}

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.


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.


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);
    }
}

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

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})

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.


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

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)} />

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>


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


Niezwykle nieefektywny sposób na zrobienie tego.
AStopher
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.