Skąd mam wiedzieć, który przycisk radiowy jest wybrany za pomocą jQuery?

2702

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

Mogę uzyskać wszystkie w ten sposób:

$("form :radio")

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

juan
źródło

Odpowiedzi:

3933

Aby uzyskać wartość wybranego radioName elementu 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>

Peter J.
źródło
306
Skończyło się za pomocą tego: $ ( 'wejście formularz [type = radio]: sprawdzone')
Juan
46
@PeterJ: Dlaczego użyłeś dwóch argumentów zamiast po prostu '#myform input[name=radioName]:checked'?
Sophie Alpert,
145
jQuery działa najlepiej, gdy jest poprawnie skalowany, a wybieranie według ID jest zawsze najskuteczniejszym selektorem. Metoda dwóch argumentów jest po prostu innym sposobem na zrobienie tego.
Peter J
40
Aby uzyskać najlepszą wydajność, dokumentacja zaleca nieużywanie: selektora radia. api.jquery.com/radio-selector
Peter J
2
Alternate: $ ('. ClassName: zaznaczone');
Meetai.com
409

Użyj tego..

$("#myform input[type='radio']:checked").val();
Joberror
źródło
64
Jeśli twój formularz ma wiele zestawów przycisków opcji, to myślę, że dostanie tylko wartość pierwszego zestawu.
Brad
3
Zwróci tylko wartość pierwszego przycisku opcji zaznaczonego w formularzu. Należy to zrobić tak, jak sugerował Peter J.
MickJ
3
@MickJ Ten fragment kodu jest taki sam jak ten z Peter J ... Biorąc pod uwagę przypadek użycia oryginalnego pytania. Jeśli jednak masz różne grupy przycisków opcji, nie będzie działać. Dlatego naprawdę lepiej jest używać [name = selector]
Lyth
1
Jak wspomniano @Brad, otrzyma tylko wartość pierwszego zestawu. To, czego chcesz, to zastąpić „.val ()” na „.map (function () {return this.value;}). Get ();”
popr.
1
Za to, co jest warte (wiem, że optymalizowanie wcześniej potrzebowało 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
307

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

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

Użyj filter()funkcji, a nie find(). ( find()służy do lokalizowania elementów potomnych / potomnych, podczas gdy filter()wyszukuje elementy najwyższego poziomu w twoim wyborze).

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

Uwagi: Ta odpowiedź pierwotnie poprawiała inną odpowiedź, która zalecała użycie find(), która wydaje się być od tego czasu zmieniona. find()może być nadal przydatny w sytuacji, gdy masz już odwołanie do elementu kontenera, ale nie do przycisków opcji, np .:

var form = $("#mainForm");
...
var checkedValue = form.find("input[name=myRadio]:checked").val();
Matt Browne
źródło
7
Chciałem tylko dodać, dla jasności, że find () faktycznie przeszukuje wszystkie potomne elementy (które pasują do danego selektora). Jeśli chcesz tylko bezpośrednich dzieci, użyj children ().
Matt Browne,
139

To powinno działać:

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

Zwróć uwagę na „” używane wokół wejścia: zaznaczone, a nie „” jak rozwiązanie Petera J.

Cam Tullos
źródło
to powinna być wybrana odpowiedź. nazwa to bardzo fajny sposób na śledzenie przycisków radiowych
cichy
79

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

 $("form:radio:checked").val();
tvanfosson
źródło
13
Wygląda to ładnie, jednak w dokumentacji jQuery zaleca się użycie [type = radio] zamiast: radio dla lepszej wydajności. Jest to kompromis między czytelnością a wydajnością. Zwykle biorę pod uwagę czytelność w stosunku do wydajności w tak trywialnych sprawach, ale w tym przypadku myślę, że [typ = radio] jest właściwie jaśniejsze. W tym przypadku wyglądałoby to jak $ („formularz input [type = radio]: zaznaczony”). Val (). Jednak wciąż poprawna odpowiedź.
Brak,
57

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

$("#Myradio").is(":checked")
Juan
źródło
53

Uzyskaj wszystkie radia:

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

Filtruj, by sprawdzić, który jest zaznaczony

radios.filter(":checked")
Alex V.
źródło
48

Inną opcją jest:

$('input[name=radioName]:checked').val()
Czerwony smok
źródło
6
Część „: radio” nie jest tutaj potrzebna.
Matt Browne,
31
$("input:radio:checked").val();
Phillip Senn
źródło
25

Oto, jak napisałbym formularz i zajął się sprawdzaniem radia.

Za pomocą formularza o nazwie myForm:

<form id='myForm'>
    <input type='radio' name='radio1' class='radio1' value='val1' />
    <input type='radio' name='radio1' class='radio1' value='val2' />
    ...
</form>

Uzyskaj wartość z formularza:

$('#myForm .radio1:checked').val();

Jeśli nie publikujesz formularza, uprościłbym go jeszcze bardziej, używając:

<input type='radio' class='radio1' value='val1' />
<input type='radio' class='radio1' value='val2' />

Następnie uzyskanie sprawdzonej wartości staje się:

    $('.radio1:checked').val();

Posiadanie nazwy klasy na wejściu pozwala mi łatwo stylizować dane wejściowe ...

Darin Peterson
źródło
24

W moim przypadku mam dwa przyciski opcji w jednej formie i chciałem poznać status każdego przycisku. To poniżej działało dla mnie:

// get radio buttons value
console.log( "radio1: " +  $('input[id=radio1]:checked', '#toggle-form').val() );
console.log( "radio2: " +  $('input[id=radio2]:checked', '#toggle-form').val() );


    
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="toggle-form">
  <div id="radio">
    <input type="radio" id="radio1" name="radio" checked="checked" /><label for="radio1">Plot single</label>
    <input type="radio" id="radio2" name="radio"/><label for="radio2">Plot all</label>
  </div>
</form>

rmbianchi
źródło
1
Co masz na myśli status każdego przycisku? przyciski radiowe o tej samej nazwie pozwalają na sprawdzenie tylko jednego, dlatego jeśli dostaniesz zaznaczony, pozostałe nie są zaznaczone.
Dementyczny
17

W przycisku radiowym wygenerowanym przez JSF (przy użyciu <h:selectOneRadio>znacznika) możesz to zrobić:

radiobuttonvalue = jQuery("input[name='form_id\:radiobutton_id']:checked").val();

gdzie selectOneRadio ID to radiobutton_id, a identyfikator formularza to id_formatu .

Pamiętaj, aby użyć nazwy zamiast id , jak wskazano, ponieważ jQuery używa tego atrybutu ( nazwa jest generowana automatycznie przez JSF przypominający identyfikator kontroli).

Francisco Alvarado
źródło
15

Sprawdź także, czy użytkownik niczego nie wybiera.

var radioanswer = 'none';
if ($('input[name=myRadio]:checked').val() != null) {           
   radioanswer = $('input[name=myRadio]:checked').val();
}
znak
źródło
15

Napisałem wtyczkę jQuery do ustawiania i uzyskiwania wartości przycisków opcji. Szanuje również zdarzenie „zmiany” na nich.

(function ($) {

    function changeRadioButton(element, value) {
        var name = $(element).attr("name");
        $("[type=radio][name=" + name + "]:checked").removeAttr("checked");
        $("[type=radio][name=" + name + "][value=" + value + "]").attr("checked", "checked");
        $("[type=radio][name=" + name + "]:checked").change();
    }

    function getRadioButton(element) {
        var name = $(element).attr("name");
        return $("[type=radio][name=" + name + "]:checked").attr("value");
    }

    var originalVal = $.fn.val;
    $.fn.val = function(value) {

        //is it a radio button? treat it differently.
        if($(this).is("[type=radio]")) {

            if (typeof value != 'undefined') {

                //setter
                changeRadioButton(this, value);
                return $(this);

            } else {

                //getter
                return getRadioButton(this);

            }

        } else {

            //it wasn't a radio button - let's call the default val function.
            if (typeof value != 'undefined') {
                return originalVal.call(this, value);
            } else {
                return originalVal.call(this);
            }

        }
    };
})(jQuery);

Umieść kod w dowolnym miejscu, aby włączyć dodatek. Więc ciesz się! Po prostu zastępuje domyślną funkcję val, nie niszcząc niczego.

Możesz odwiedzić ten jsFiddle, aby wypróbować go w akcji i zobaczyć, jak to działa.

Skrzypce

Mathias Lykkegaard Lorenzen
źródło
14

Jeśli masz wiele przycisków opcji w jednej formie, to

var myRadio1 = $('input[name=radioButtonName1]');
var value1 = myRadio1.filter(':checked').val();

var myRadio2 = $('input[name=radioButtonName2]');
var value2 = myRadio2.filter(':checked').val();

To działa dla mnie.

Ramesh
źródło
12
 $(".Stat").click(function () {
     var rdbVal1 = $("input[name$=S]:checked").val();
 }
Swadesh Bhattacharya
źródło
12

To działa dobrze

$('input[type="radio"][class="className"]:checked').val()

Demo pracy

:checkedSelektor pracuje checkboxes, radio buttonsi wybierz elementy. Tylko w przypadku wybranych elementów użyj :selectedselektora.

API dla :checked Selector

Manoj
źródło
11

Aby uzyskać wartość wybranego radia korzystającego z klasy:

$('.class:checked').val()
Rodrigo Dias
źródło
10

Używam tego prostego skryptu

$('input[name="myRadio"]').on('change', function() {
  var radioValue = $('input[name="myRadio"]:checked').val();        
  alert(radioValue); 
});
Lafif Astahdziq
źródło
Użyj zdarzenia kliknięcia zamiast zdarzenia zmiany, jeśli chcesz, aby działało we wszystkich przeglądarkach
Matt Browne
10

Użyj tego:

value = $('input[name=button-name]:checked').val();
jeswin
źródło
8

DEMO : https://jsfiddle.net/ipsjolly/xygr065w/

	$(function(){
	    $("#submit").click(function(){      
	        alert($('input:radio:checked').val());
	    });
	 });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
       <tr>
         <td>Sales Promotion</td>
         <td><input type="radio" name="q12_3" value="1">1</td>
         <td><input type="radio" name="q12_3" value="2">2</td>
         <td><input type="radio" name="q12_3" value="3">3</td>
         <td><input type="radio" name="q12_3" value="4">4</td>
         <td><input type="radio" name="q12_3" value="5">5</td>
      </tr>
    </table>
<button id="submit">submit</button>

Code Spy
źródło
6

Jeśli masz tylko 1 zestaw przycisków opcji w jednym formularzu, kod jQuery jest tak prosty:

$( "input:checked" ).val()
Randy Greencorn
źródło
5

Wydałem bibliotekę, aby w tym pomóc. Pobiera wszystkie możliwe wartości wejściowe, ale obejmuje również zaznaczony przycisk opcji. Możesz to sprawdzić na https://github.com/mazondo/formalizedata

Otrzymasz obiekt js odpowiedzi, więc formularz taki jak:

<form>
<input type="radio" name"favorite-color" value="blue" checked> Blue
<input type="radio" name="favorite-color" value="red"> Red
</form>

da tobie:

$("form").formalizeData()
{
  "favorite-color" : "blue"
}
Ryan
źródło
4

Aby pobrać wszystkie wartości przycisków opcji w tablicy JavaScript, użyj następującego kodu jQuery:

var values = jQuery('input:checkbox:checked.group1').map(function () {
    return this.value;
}).get();
Nilesh
źródło
2
Przyciski opcji nie są takie same jak pola wyboru. W tym przykładzie użyto pól wyboru.
Matt Browne,
4

Spróbuj-

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

console.log(radioVal);
Gautam Rai
źródło
4

JQuery, aby uzyskać wszystkie przyciski opcji w formularzu i zaznaczoną wartość.

$.each($("input[type='radio']").filter(":checked"), function () {
  console.log("Name:" + this.name);
  console.log("Value:" + $(this).val());
});
Iyyappan Amirthalingam
źródło
3

Innym sposobem na zdobycie go:

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

Mehdi Bouzidi
źródło
2
$(function () {
// Someone has clicked one of the radio buttons
var myform= 'form.myform';
$(myform).click(function () {
    var radValue= "";
    $(this).find('input[type=radio]:checked').each(function () {
        radValue= $(this).val();
    });
  })
});
JoshYates1980
źródło
1

Z tego pytania wymyśliłem alternatywny sposób dostępu do aktualnie wybranego, inputgdy jesteś w clickwydarzeniu dla jego odpowiedniej etykiety. Powodem jest to, że nowo wybrany inputnie jest aktualizowany, dopóki nie nastąpi labelzdarzenie kliknięcia.

TL; DR

$('label').click(function() {
  var selected = $('#' + $(this).attr('for')).val();

  ...
});

Patrick Roberts
źródło
1

Musiałem uprościć kod C #, czyli zrobić jak najwięcej w JavaScript. Używam kontenera zestawu pól, ponieważ pracuję w DNN i ma on swoją własną formę. Więc nie mogę dodać formularza.

Muszę przetestować, które pole tekstowe z 3 jest używane, a jeśli tak, to jakiego rodzaju wyszukiwania? Zaczyna się od wartości, zawiera wartość, dokładne dopasowanie wartości.

HTML:

<fieldset id="fsPartNum" class="form-inline">
<div class="form-group">
    <label for="txtPartNumber">Part Number:</label>
    <input type="text" id="txtPartNumber" class="input-margin-pn" />
</div>
<div class="form-group">
    <label for="radPNStartsWith">Starts With: </label>
    <input type="radio" id="radPNStartsWith" name="partNumber" checked  value="StartsWith"/>
</div>
<div class="form-group">
    <label for="radPNContains">Contains: </label>
    <input type="radio" id="radPNContains" name="partNumber" value="Contains" />
</div>
<div class="form-group">
    <label for="radPNExactMatch">Exact Match: </label>
    <input type="radio" id="radPNExactMatch" name="partNumber" value="ExactMatch" />
</div>

A mój JavaScript to:

        alert($('input[name=partNumber]:checked', '#fsPartNum').val()); 
    if(txtPartNumber.val() !== ''){
        message = 'Customer Part Number';
    }
    else if(txtCommercialPartNumber.val() !== ''){

    }
    else if(txtDescription.val() !== ''){

    }

Wystarczy powiedzieć, że można użyć dowolnego tagu zawierającego identyfikator. Dla DNNerów warto to wiedzieć. Ostatecznym celem jest przekazanie kodu średniego poziomu, który jest potrzebny do rozpoczęcia wyszukiwania części w SQL Server.

W ten sposób nie muszę kopiować znacznie bardziej skomplikowanego poprzedniego kodu C #. Podnoszenie ciężarów odbywa się właśnie tutaj.

Musiałem poszukać trochę tego, a potem majstrować przy nim, aby uruchomić. Mam nadzieję, że dla innych DNN jest to łatwe do znalezienia.

użytkownik1585204
źródło