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?

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>


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

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

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.


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

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

53

Uzyskaj wszystkie radia:

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

Filtruj, by sprawdzić, który jest zaznaczony

radios.filter(":checked")



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


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>


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


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

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


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.



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


11

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

$('.class:checked').val()

10

Używam tego prostego skryptu

$('input[name="myRadio"]').on('change', function() {
  var radioValue = $('input[name="myRadio"]:checked').val();        
  alert(radioValue); 
});

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

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>


6

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

$( "input:checked" ).val()

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

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

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

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

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>


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

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

  ...
});


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.

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.