Làm cách nào để biết nút radio nào được chọn qua jQuery?


2706

Tôi có hai nút radio và muốn đăng giá trị của nút đã chọn. Làm cách nào tôi có thể nhận được giá trị với jQuery?

Tôi có thể có được tất cả chúng như thế này:

$("form :radio")

Làm thế nào để tôi biết cái nào được chọn?

Câu trả lời:


3935

Để lấy giá trị của mục đã chọn radioName của biểu mẫu có id myForm:

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

Đây là một ví dụ:

$('#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
Tôi đã kết thúc bằng cách sử dụng: $ ('form input [type = radio]: đã kiểm tra')
juan

46
@PeterJ: Tại sao bạn sử dụng hai đối số thay vì đơn giản '#myform input[name=radioName]:checked'?
Sophie Alpert

145
jQuery hoạt động tốt nhất khi được sắp xếp chính xác và chọn theo ID luôn là bộ chọn hiệu suất cao nhất. Phương pháp hai đối số chỉ đơn giản là một cách khác để làm điều đó.
Peter J

40
Để có hiệu suất tốt nhất, tài liệu khuyến nghị không sử dụng: bộ chọn radio. api.jquery.com/radio-selector
Peter J

2
Thay thế: $ ('. ClassName: đã kiểm tra');
Meetai.com

410

Dùng cái này..

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

64
Nếu hình thức của bạn có nhiều bộ nút radio, điều này sẽ chỉ nhận được giá trị của bộ đầu tiên, tôi nghĩ vậy.
Brad

3
Điều này sẽ chỉ trả về giá trị của nút radio đầu tiên được kiểm tra trong biểu mẫu. Nó nên được thực hiện như cách Peter J đề xuất.
MickJ

3
@MickJ Đoạn mã này giống như đoạn mã của Peter J ... Xem xét trường hợp sử dụng của câu hỏi ban đầu. Tuy nhiên, nếu bạn có nhiều nhóm nút radio khác nhau, nó sẽ không hoạt động. Đó là lý do tại sao nó tốt hơn để sử dụng [name = selector]
Lyth

1
Như @Brad đã đề cập, điều này sẽ chỉ nhận được giá trị của tập đầu tiên. Những gì bạn muốn là thay thế ".val ()" bằng ".map (function () {return this.value;}). Get ();"
sáng

1
Đối với những gì đáng giá, (tôi biết tối ưu hóa trước khi cần blah blah) nhưng đối với hiệu suất thuần túy, nó hoạt động nhanh hơn đặc biệt là trong các trình duyệt cũ hơn:$("#myform").find("input[type='radio']:checked").val();
Mark Schultheiss

307

Nếu bạn đã có một tham chiếu đến nhóm nút radio, ví dụ:

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

Sử dụng filter()chức năng, không find(). ( find()dành cho việc định vị các phần tử con / hậu duệ, trong khi filter()tìm kiếm các phần tử cấp cao nhất trong lựa chọn của bạn.)

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

Lưu ý: Câu trả lời này ban đầu đã sửa một câu trả lời khác được khuyến nghị sử dụng find(), dường như đã được thay đổi. find()vẫn có thể hữu ích cho trường hợp bạn đã có tham chiếu đến phần tử chứa, nhưng không hữu ích cho các nút radio, ví dụ:

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

7
Tôi chỉ muốn thêm vào, vì mục đích rõ ràng, find () thực sự tìm kiếm tất cả các phần tử con cháu (khớp với bộ chọn đã cho). Nếu bạn chỉ muốn trẻ em trực tiếp, sử dụng trẻ em ().
Matt Browne

139

Điều này sẽ làm việc:

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

Lưu ý "" sử dụng xung quanh đầu vào: đã chọn và không '' như giải pháp của Peter J


đây nên là câu trả lời được chọn Tên là một cách rất hay để theo dõi các nút radio
lúc 13:30

79

Bạn có thể sử dụng bộ chọn: đã chọn cùng với bộ chọn radio.

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

13
Điều này có vẻ tốt, tuy nhiên, tài liệu jQuery khuyên bạn nên sử dụng [type = radio] thay vì: radio để có hiệu suất tốt hơn. Đó là một sự đánh đổi giữa khả năng đọc và hiệu suất. Tôi thường có khả năng đọc qua hiệu suất đối với các vấn đề tầm thường như vậy, nhưng trong trường hợp này tôi nghĩ rằng [type = radio] thực sự rõ ràng hơn. Vì vậy, trong trường hợp này, nó sẽ trông giống như $ ("form input [type = radio]: đã kiểm tra"). Val (). Vẫn là một câu trả lời hợp lệ.
Không có

57

Nếu bạn chỉ muốn giá trị boolean, tức là nếu nó được kiểm tra hay không, hãy thử điều này:

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

53

Nhận tất cả các bộ đàm:

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

Bộ lọc để có được cái mà đã kiểm tra

radios.filter(":checked")



25

Đây là cách tôi sẽ viết biểu mẫu và xử lý việc nhận được radio đã kiểm tra.

Sử dụng một hình thức gọi là myForm:

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

Lấy giá trị từ mẫu:

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

Nếu bạn không đăng biểu mẫu, tôi sẽ đơn giản hóa hơn nữa bằng cách sử dụng:

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

Sau đó, nhận được giá trị được kiểm tra trở thành:

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

Có một tên lớp trên đầu vào cho phép tôi dễ dàng định kiểu đầu vào ...


24

Trong trường hợp của tôi, tôi có hai nút radio ở một dạng và tôi muốn biết trạng thái của từng nút. Điều này dưới đây làm việc cho tôi:

// 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
Bạn có ý nghĩa gì về trạng thái của từng nút? các nút radio có cùng tên chỉ cho phép một nút được kiểm tra, do đó, nếu bạn chọn nút này, phần còn lại sẽ không được chọn.
Mất trí nhớ

17

Trong nút radio do JSF tạo (sử dụng <h:selectOneRadio>thẻ), bạn có thể thực hiện việc này:

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

trong đó selectOneRadio ID là radiobutton_id và ID mẫu là form_id .

Hãy chắc chắn sử dụng tên thay vì id , như đã chỉ ra, bởi vì jQuery sử dụng thuộc tính này ( tên được tạo tự động bởi ID điều khiển giống như JSF).


15

Ngoài ra, kiểm tra nếu người dùng không chọn bất cứ điều gì.

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

15

Tôi đã viết một plugin jQuery để thiết lập và nhận các giá trị nút radio. Nó cũng tôn trọng sự kiện "thay đổi" trên chúng.

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

Đặt mã bất cứ nơi nào để kích hoạt addin. Sau đó hãy tận hưởng! Nó chỉ ghi đè chức năng val mặc định mà không phá vỡ bất cứ điều gì.

Bạn có thể truy cập jsFiddle này để thử nó hoạt động và xem nó hoạt động như thế nào.

Vĩ cầm


14

Nếu bạn có nhiều nút radio ở dạng đơn thì

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

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

Đây là làm việc cho tôi.



12

Cái này hoạt động tốt

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

Trình diễn làm việc

Các :checkedselector làm việc cho checkboxes, radio buttonsvà chọn các yếu tố. Đối với chỉ các phần tử chọn, sử dụng :selectedbộ chọn.

API cho :checked Selector


11

Để nhận giá trị của radio đã chọn sử dụng một lớp:

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

10

Tôi sử dụng kịch bản đơn giản này

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

Sử dụng sự kiện nhấp chuột thay vì sự kiện thay đổi nếu bạn muốn nó hoạt động trong tất cả các trình duyệt
Matt Browne

10

Dùng cái này:

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

Nếu bạn chỉ có 1 bộ nút radio trên 1 biểu mẫu, mã jQuery cũng đơn giản như sau:

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

5

Tôi đã phát hành một thư viện để giúp đỡ này. Thực tế, kéo tất cả các giá trị đầu vào có thể, nhưng cũng bao gồm nút radio nào đã được kiểm tra. Bạn có thể xem thử tại https://github.com/mazondo/formalizedata

Nó sẽ cung cấp cho bạn một đối tượng js của các câu trả lời, vì vậy một dạng như:

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

sẽ cung cấp cho bạn:

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

4

Để lấy tất cả các giá trị nút radio trong mảng JavaScript, hãy sử dụng mã jQuery sau:

var values = jQuery('input:checkbox:checked.group1').map(function () {
    return this.value;
}).get();

2
Các nút radio không giống như các hộp kiểm. Ví dụ này sử dụng các hộp kiểm.
Matt Browne

4

thử nó-

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

console.log(radioVal);

4

JQuery để có được tất cả các nút radio ở dạng và giá trị được kiểm tra.

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

3

Một cách khác để có được nó:

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

Từ câu hỏi này , tôi đã đưa ra một cách khác để truy cập vào lựa chọn hiện tại inputkhi bạn tham gia một clicksự kiện cho nhãn tương ứng của nó. Lý do là vì sự lựa chọn mới inputkhông được cập nhật cho đến sau labelsự kiện nhấp chuột của nó .

TL; DR

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

  ...
});


1

Những gì tôi cần làm là đơn giản hóa mã C #, đó là làm càng nhiều càng tốt trong JavaScript front end. Tôi đang sử dụng bộ chứa trường vì tôi đang làm việc trong DNN và nó có hình thức riêng. Vì vậy, tôi không thể thêm một hình thức.

Tôi cần kiểm tra hộp văn bản nào trong số 3 đang được sử dụng và nếu có, loại tìm kiếm là gì? Bắt đầu với giá trị, Chứa giá trị, Kết hợp chính xác của giá trị.

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>

Và JavaScript của tôi là:

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

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

    }

Chỉ cần nói bất kỳ thẻ có chứa ID có thể được sử dụng. Đối với DNNers, điều này là tốt để biết. Mục tiêu cuối cùng ở đây là chuyển đến mã trung cấp những gì cần thiết để bắt đầu tìm kiếm bộ phận trong SQL Server.

Bằng cách này, tôi cũng không phải sao chép mã C # phức tạp hơn nhiều. Việc nâng vật nặng đang được thực hiện ngay tại đây.

Tôi đã phải tìm một chút cho điều này và sau đó sửa lại để làm cho nó hoạt động. Vì vậy, đối với các DNNers khác, hy vọng điều này dễ tìm thấy.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.