Bagaimana saya bisa tahu tombol radio mana yang dipilih melalui jQuery?

2707

Saya memiliki dua tombol radio dan ingin memposting nilai yang dipilih. Bagaimana saya bisa mendapatkan nilai dengan jQuery?

Saya bisa mendapatkan semuanya seperti ini:

$("form :radio")

Bagaimana saya tahu yang mana yang dipilih?

juan
sumber

Jawaban:

3936

Untuk mendapatkan nilai yang dipilih radioName item formulir dengan id myForm:

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

Ini sebuah contoh:

$('#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
sumber
306
Saya akhirnya menggunakan ini: $ ('form input [type = radio]: checked')
juan
46
@ PeterJ: Mengapa Anda menggunakan dua argumen, bukan hanya '#myform input[name=radioName]:checked'?
Sophie Alpert
145
jQuery berkinerja terbaik ketika dicakup dengan benar, dan memilih dengan ID selalu merupakan pemilih dengan kinerja tertinggi. Metode dua argumen hanyalah cara lain untuk melakukannya.
Peter J
40
Untuk kinerja terbaik, dokumentasi merekomendasikan untuk tidak menggunakan: pemilih radio. api.jquery.com/radio-selector
Peter J
2
Alternatif: $ ('. ClassName: dicentang');
Meetai.com
410

Gunakan ini..

$("#myform input[type='radio']:checked").val();
Joberror
sumber
64
Jika formulir Anda memiliki beberapa set tombol radio, ini hanya akan mendapatkan nilai set pertama, saya pikir.
Brad
3
Ini hanya akan mengembalikan nilai tombol radio pertama yang dicentang dalam formulir. Itu harus dilakukan seperti yang disarankan Peter J.
MickJ
3
@MickJ Bagian kode ini sama dengan yang dari Peter J ... Mempertimbangkan kasus penggunaan dari pertanyaan asli. Namun, jika Anda memiliki berbagai kelompok tombol radio, itu tidak akan berfungsi. Itu sebabnya lebih baik menggunakan [name = selector]
Lyth
1
Seperti yang disebutkan @Brad, ini hanya akan mendapatkan nilai set pertama. Yang Anda inginkan adalah mengganti ".val ()" dengan ".map (function () {return this.value;}). Get ();"
pagi
1
Untuk apa nilainya, (ya saya tahu mengoptimalkan sebelum diperlukan bla bla) tetapi untuk kinerja murni ini bekerja lebih cepat terutama di browser yang lebih tua:$("#myform").find("input[type='radio']:checked").val();
Mark Schultheiss
307

Jika Anda sudah memiliki referensi ke grup tombol radio, misalnya:

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

Gunakan filter()fungsinya, bukan find(). ( find()untuk menemukan elemen turunan / turunan, sedangkan filter()mencari elemen tingkat atas dalam pilihan Anda.)

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

Catatan: Jawaban ini awalnya mengoreksi jawaban lain yang direkomendasikan untuk digunakan find(), yang tampaknya telah diubah sejak saat itu. find()masih bisa berguna untuk situasi di mana Anda sudah memiliki referensi ke elemen wadah, tetapi tidak ke tombol radio, misalnya:

var form = $("#mainForm");
...
var checkedValue = form.find("input[name=myRadio]:checked").val();
Matt Browne
sumber
7
Saya hanya ingin menambahkan, demi kejelasan, bahwa find () sebenarnya mencari semua elemen turunan (yang cocok dengan pemilih yang diberikan). Jika Anda hanya ingin anak-anak langsung, gunakan anak-anak ().
Matt Browne
139

Ini seharusnya bekerja:

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

Perhatikan "" yang digunakan di sekitar input: dicentang dan tidak "" seperti solusi Peter J.

Cam Tullos
sumber
ini harus menjadi jawaban yang dipilih. nama adalah cara yang sangat baik untuk melacak tombol radio
quemeful
79

Anda dapat menggunakan pemilih yang diperiksa: bersama dengan pemilih radio.

 $("form:radio:checked").val();
tvanfosson
sumber
13
Ini terlihat bagus, namun, dokumentasi jQuery merekomendasikan penggunaan [type = radio] daripada: radio untuk kinerja yang lebih baik. Ini adalah tradeoff antara keterbacaan dan kinerja. Saya biasanya mengambil keterbacaan atas kinerja pada hal-hal sepele seperti itu, tetapi dalam hal ini saya pikir [type = radio] sebenarnya lebih jelas. Jadi dalam kasus ini akan terlihat seperti $ ("form input [type = radio]: checked"). Val (). Masih jawaban yang valid.
Tidak ada
57

Jika Anda hanya menginginkan nilai boolean, yaitu apakah dicentang atau tidak coba ini:

$("#Myradio").is(":checked")
Juan
sumber
53

Dapatkan semua radio:

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

Saring untuk memeriksanya

radios.filter(":checked")
Alex V
sumber
48

Pilihan lain adalah:

$('input[name=radioName]:checked').val()
Naga merah
sumber
6
Bagian ": radio" tidak diperlukan di sini.
Matt Browne
31
$("input:radio:checked").val();
Phillip Senn
sumber
25

Inilah cara saya akan menulis formulir dan menangani pengambilan radio yang diperiksa.

Menggunakan formulir yang disebut myForm:

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

Dapatkan nilai dari formulir:

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

Jika Anda tidak memposting formulir, saya akan menyederhanakannya lebih lanjut dengan menggunakan:

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

Kemudian mendapatkan nilai yang diperiksa menjadi:

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

Memiliki nama kelas pada input memungkinkan saya untuk dengan mudah mendesain input ...

Darin Peterson
sumber
24

Dalam kasus saya, saya memiliki dua tombol radio dalam satu bentuk dan saya ingin mengetahui status setiap tombol. Ini di bawah ini bekerja untuk saya:

// 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
sumber
1
Apa maksud Anda status setiap tombol? tombol radio dengan nama yang sama hanya memungkinkan satu untuk diperiksa, karenanya, jika Anda memeriksanya, sisanya tidak dicentang.
Demensik
17

Dalam tombol radio yang dihasilkan JSF (menggunakan <h:selectOneRadio>tag), Anda dapat melakukan ini:

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

di mana selectOneRadio ID adalah radiobutton_id dan form ID adalah form_id .

Pastikan untuk menggunakan nama, bukan id , seperti yang ditunjukkan, karena jQuery menggunakan atribut ini ( nama dihasilkan secara otomatis oleh JSF menyerupai ID kontrol).

Francisco Alvarado
sumber
15

Juga, periksa apakah pengguna tidak memilih apa pun.

var radioanswer = 'none';
if ($('input[name=myRadio]:checked').val() != null) {           
   radioanswer = $('input[name=myRadio]:checked').val();
}
Menandai
sumber
15

Saya menulis plugin jQuery untuk pengaturan dan mendapatkan nilai tombol radio. Itu juga menghormati acara "perubahan" pada mereka.

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

Letakkan kode di mana saja untuk mengaktifkan addin. Maka nikmatilah! Itu hanya mengesampingkan fungsi val default tanpa merusak apa pun.

Anda dapat mengunjungi jsFiddle ini untuk mencobanya, dan melihat cara kerjanya.

Biola

Mathias Lykkegaard Lorenzen
sumber
14

Jika Anda memiliki beberapa tombol radio dalam bentuk tunggal, maka

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

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

Ini bekerja untuk saya.

Ramesh
sumber
12
 $(".Stat").click(function () {
     var rdbVal1 = $("input[name$=S]:checked").val();
 }
Swadesh Bhattacharya
sumber
12

Ini berfungsi dengan baik

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

Demo yang Bekerja

The :checkedpemilih bekerja untuk checkboxes, radio buttonsdan pilih elemen. Untuk elemen tertentu saja, gunakan :selectedpemilih.

API untuk :checked Selector

Manoj
sumber
11

Untuk mendapatkan nilai radio yang dipilih yang menggunakan kelas:

$('.class:checked').val()
Rodrigo Dias
sumber
10

Saya menggunakan skrip sederhana ini

$('input[name="myRadio"]').on('change', function() {
  var radioValue = $('input[name="myRadio"]:checked').val();        
  alert(radioValue); 
});
Lafif Astahdziq
sumber
Gunakan acara klik alih-alih acara perubahan jika Anda ingin itu berfungsi di semua browser
Matt Browne
10

Gunakan ini:

value = $('input[name=button-name]:checked').val();
jeswin
sumber
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>

Kode Mata-mata
sumber
6

Jika Anda hanya memiliki 1 set tombol radio pada 1 formulir, kode jQuery sesederhana ini:

$( "input:checked" ).val()
Randy Greencorn
sumber
5

Saya telah merilis perpustakaan untuk membantu ini. Menarik semua nilai input yang mungkin, sebenarnya, tetapi juga termasuk tombol radio mana yang diperiksa. Anda dapat memeriksanya di https://github.com/mazondo/formalizedata

Ini akan memberi Anda objek js dari jawaban, jadi formulir seperti:

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

akan memberimu:

$("form").formalizeData()
{
  "favorite-color" : "blue"
}
Ryan
sumber
4

Untuk mengambil semua nilai tombol radio dalam larik JavaScript gunakan kode jQuery berikut:

var values = jQuery('input:checkbox:checked.group1').map(function () {
    return this.value;
}).get();
Nilesh
sumber
2
Tombol radio tidak sama dengan kotak centang. Contoh ini menggunakan kotak centang.
Matt Browne
4

Cobalah-

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

console.log(radioVal);
Gautam Rai
sumber
4

JQuery untuk mendapatkan semua tombol radio dalam bentuk dan nilai yang diperiksa.

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

Cara lain untuk mendapatkannya:

 $("#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
sumber
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
sumber
1

Dari pertanyaan ini , saya menemukan cara alternatif untuk mengakses yang saat ini dipilih inputketika Anda berada dalam suatu clickacara untuk label masing-masing. Alasannya adalah karena yang baru dipilih inputtidak diperbarui sampai setelah labelacara kliknya.

TL; DR

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

  ...
});

Patrick Roberts
sumber
1

Apa yang perlu saya lakukan adalah menyederhanakan kode C #, yaitu melakukan sebanyak mungkin di JavaScript ujung depan. Saya menggunakan wadah fieldset karena saya bekerja di DNN dan memiliki bentuknya sendiri. Jadi saya tidak bisa menambahkan formulir.

Saya perlu menguji kotak teks mana dari 3 yang digunakan dan jika ya, apa jenis pencariannya? Mulai dengan nilainya, Berisi nilainya, Pencocokan tepat nilainya.

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>

Dan JavaScript saya adalah:

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

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

    }

Hanya mengatakan tag berisi ID apa pun dapat digunakan. Untuk DNNers, ini baik untuk diketahui. Tujuan akhir di sini adalah meneruskan ke kode tingkat menengah apa yang diperlukan untuk memulai pencarian bagian dalam SQL Server.

Dengan cara ini saya tidak perlu menyalin kode C # sebelumnya jauh lebih rumit juga. Pengangkatan berat sedang dilakukan di sini.

Saya harus mencari sedikit untuk ini dan kemudian bermain-main dengannya untuk membuatnya bekerja. Jadi untuk DNNers lain, mudah-mudahan ini mudah ditemukan.

pengguna1585204
sumber