Pytanie Skąd mogę wiedzieć, który przycisk radiowy został wybrany przez jQuery?


Mam dwa przyciski opcji i chcę opublikować wartość wybranego. Jak mogę uzyskać wartość za pomocą jQuery?

Mogę uzyskać wszystkie z nich w ten sposób:

$("form :radio")

Skąd mam wiedzieć, który z nich jest wybrany?


2293
2018-02-27 19:53


pochodzenie




Odpowiedzi:


Aby uzyskać wartość wybrany  radioName element formularza o identyfikatorze myForm:

$('input[name=radioName]:checked', '#myForm').val()

Oto przykład:

$('#myForm input').on('change', function() {
   alert($('input[name=radioName]:checked', '#myForm').val()); 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="myForm">
  <input type="radio" name="radioName" value="1" /> 1 <br />
  <input type="radio" name="radioName" value="2" /> 2 <br />
  <input type="radio" name="radioName" value="3" /> 3 <br />
</form>


3535
2018-02-27 19:58



Skończyło się na tym: $ ('form input [type = radio]: checked') - juan
@PeterJ: Dlaczego zamiast zwykłych użyć dwóch argumentów? '#myform input[name=radioName]:checked'? - Sophie Alpert
jQuery działa najlepiej, gdy ma zasięg zgodny z prawdą, a wybór przez ID jest zawsze najbardziej wydajnym selektorem. Metoda dwuargumentowa to po prostu inny sposób robienia tego. - Peter J
Dlaczego nie: radio: sprawdzone? - Bakaburg
Aby uzyskać najlepszą wydajność, dokumentacja nie zaleca używania: wybieraka radia. api.jquery.com/radio-selector - Peter J


Użyj tego..

$("#myform input[type='radio']:checked").val();

370
2018-01-07 00:45



Jeśli twój formularz ma wiele zestawów przycisków radiowych, to tylko wartość pierwszego zestawu, jak sądzę. - Brad
Zwróci to wartość tylko pierwszego przycisku opcji zaznaczonego w formularzu. Powinno to być zrobione tak, jak sugerował Peter J. - MickJ
@MickJ Ten fragment kodu jest taki sam, jak fragment Peter J ... Biorąc pod uwagę przypadek użycia oryginalnego pytania. Jeśli jednak masz różne grupy przycisków radiowych, nie będzie działać. Dlatego lepiej używać [name = selector] - Lyth
Jak wspomniał @Brad, otrzyma on tylko wartość pierwszego zestawu. To, czego chcesz, to zamiana ".val ()" na ".map (function () {return this.value;}). Get ();" - am_
Za to, co jest warte, (wiem, że optymalizuję, zanim będzie potrzebna bla bla), ale dla czystej wydajności działa to szybciej, zwłaszcza w starszych przeglądarkach: $("#myform").find("input[type='radio']:checked").val(); - Mark Schultheiss


Jeśli masz już odniesienie do grupy przycisków radiowych, na przykład:

var myRadio = $("input[name=myRadio]");

Użyj filter() funkcja, nie find(). (find() służy do lokalizowania elementów potomnych / potomnych, natomiast filter() przeszukuje elementy najwyższego poziomu w twoim wyborze.)

var checkedValue = myRadio.filter(":checked").val();

Uwagi: Ta odpowiedź początkowo korygowała inną odpowiedź, która zalecała użycie find(), który wydaje się, że został zmieniony. find() może być przydatna w sytuacji, w której masz już odniesienie do elementu kontenera, ale nie do przycisków opcji, np .:

var form = $("#mainForm");
...
var checkedValue = form.find("input[name=myRadio]:checked").val();

256
2018-02-09 18:25



Chciałem po prostu dodać, aby find () faktycznie wyszukiwał wszystko elementy potomne (pasujące do podanego selektora). Jeśli chcesz tylko bezpośrednie dzieci, użyj dzieci (). - Matt Browne


To powinno działać:

$("input[name='radioName']:checked").val()

Zwróć uwagę na "" użytą na wejściu: sprawdzone, a nie "" jak rozwiązanie Petera J. "


119
2018-03-30 22:29





Możesz użyć: zaznaczonego selektora wraz z wybierakiem radia.

 $("form:radio:checked").val();

69
2018-02-27 20:00



To ładnie wygląda jednak dokumentacja jQuery zaleca używanie [type = radio] zamiast: radio dla lepszej wydajności. Jest to kompromis pomiędzy czytelnością i wydajnością. W tak trywialnych sprawach normalnie biorę czytelność nad wydajnością, ale w tym przypadku myślę, że [type = radio] jest bardziej wyraźne. Tak więc w tym przypadku będzie wyglądać jak $ ("wpisz wejście [typ = radio]: zaznaczone"). Val (). Nadal jest to ważna odpowiedź. - J.Money


Jeśli chcesz tylko wartość boolowską, tj. Jeśli jest zaznaczona lub nie, spróbuj tego:

$("#Myradio").is(":checked")

42
2017-08-30 20:27





Uzyskaj wszystkie radia:

var radios = jQuery("input[type='radio']");

Filtruj, aby uzyskać ten, który jest zaznaczony

radios.filter(":checked")

42
2017-09-01 17:55