我怎么知道通过jQuery选择了哪个单选按钮?

jua*_*uan 2583 html javascript jquery jquery-selectors radio-button

我有两个单选按钮,想要发布所选的一个值.如何通过jQuery获取值?

我可以像这样得到所有这些:

$("form :radio")
Run Code Online (Sandbox Code Playgroud)

我如何知道选择了哪一个?

Pet*_*r J 3820

要获取具有ID的表单的选定 radioName项的值,请执行以下操作myForm:

$('input[name=radioName]:checked', '#myForm').val()
Run Code Online (Sandbox Code Playgroud)

这是一个例子:

$('#myForm input').on('change', function() {
   alert($('input[name=radioName]:checked', '#myForm').val()); 
});
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

  • 我最终使用了这个:$('form input [type = radio]:checked') (297认同)
  • 在正确确定范围时,jQuery的性能最佳,而按ID选择始终是性能最高的选择器.双参数方法只是另一种方法. (144认同)
  • @PeterJ:为什么你使用两个参数而不是简单的''#myform input [name = radioName]:checked'`? (44认同)
  • 为获得最佳性能,文档建议不要使用:无线电选择器.http://api.jquery.com/radio-selector/ (39认同)
  • 只是添加这个,因为它可能对某人有帮助。如果收音机的名称带有方括号,例如 radioName[0](有时在 Wordpress 中使用),则您需要在名称周围使用引号,例如 input[name='radioName[0]']:checked (7认同)
  • 为什么不:收音机:检查? (4认同)
  • 只是注意,在 onChange 方法示例中,您还可以使用 this.value 代替 $('input[name=radioName]:checked', '#myForm').val() :) (3认同)
  • 替代:$('.className:checked'); (2认同)
  • @PeterJ对于旧版浏览器而言,它的性能更高,但是使用支持querySelectorAll的浏览器,使用$('#myForm input [name = radioName]:checked')应该更快,因为jQuery在内部使用querySelectorAll它可以,并且它具有重写查询以将'#myForm'(实际上[id = myForm],但这是一个实现细节)放在你提供它的查询前面.如果浏览器修复querySelectorAll以便将来在基于元素的查询上正常工作,那么在未来的jQuery版本中可能不再适用. (2认同)
  • @AngelUmeh 是的! (2认同)

Job*_*ror 397

用这个..

$("#myform input[type='radio']:checked").val();
Run Code Online (Sandbox Code Playgroud)

  • 如果你的表单有多组单选按钮,我认为这只会得到第一组的值. (61认同)
  • 这将仅返回在表单中检查的第一个单选按钮的值.它应该像Peter J所建议的那样完成. (3认同)
  • @MickJ这段代码与Peter J的代码相同...考虑原始问题的用例.但是,如果您有各种单选按钮组,则无法使用.这就是为什么使用[name = selector]会更好的原因 (3认同)

Mat*_*wne 296

如果您已经有对单选按钮组的引用,例如:

var myRadio = $("input[name=myRadio]");
Run Code Online (Sandbox Code Playgroud)

使用该filter()功能,而不是find().(find()用于查找子/后代元素,而filter()在您的选择中搜索顶级元素.)

var checkedValue = myRadio.filter(":checked").val();
Run Code Online (Sandbox Code Playgroud)

注意:这个答案最初正在纠正推荐使用的另一个答案,这个答案find()似乎已经改变了.find()对于已经有一个容器元素引用而不是单选按钮的情况,它仍然有用,例如:

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

  • 为了清楚起见,我只想添加find()实际上搜索*all*descendent元素(与给定的选择器匹配).如果您只想要直接孩子,请使用children(). (7认同)

Cam*_*los 136

这应该工作:

$("input[name='radioName']:checked").val()
Run Code Online (Sandbox Code Playgroud)

请注意输入周围的"使用:检查而不是像Peter J的解决方案"


tva*_*son 77

您可以使用:checked选择器和无线电选择器.

 $("form:radio:checked").val();
Run Code Online (Sandbox Code Playgroud)

  • 这看起来不错,但是,[jQuery文档](http://api.jquery.com/radio-selector/)建议使用[type = radio]而不是:radio来获得更好的性能.这是可读性和性能之间的权衡.我通常会在这些微不足道的事情上对性能进行可读性,但在这种情况下,我认为[type = radio]实际上更清晰.所以在这种情况下,它看起来像$("表单输入[type = radio]:checked").val().但仍然是一个有效的答案. (13认同)

Jua*_*uan 53

如果你只想要布尔值,即是否检查它,请尝试:

$("#Myradio").is(":checked")
Run Code Online (Sandbox Code Playgroud)


Ale*_*x V 52

获取所有无线电:

var radios = jQuery("input[type='radio']");
Run Code Online (Sandbox Code Playgroud)

过滤以获得已检查的那个

radios.filter(":checked")
Run Code Online (Sandbox Code Playgroud)


Red*_*gon 47

另一种选择是:

$('input[name=radioName]:checked').val()
Run Code Online (Sandbox Code Playgroud)

  • 这里不需要":无线电"部分. (6认同)

Phi*_*enn 30

$("input:radio:checked").val();
Run Code Online (Sandbox Code Playgroud)


Dar*_*son 24

这是我如何编写表单并处理已检查无线电的获取.

使用名为myForm的表单:

<form id='myForm'>
    <input type='radio' name='radio1' class='radio1' value='val1' />
    <input type='radio' name='radio1' class='radio1' value='val2' />
    ...
</form>
Run Code Online (Sandbox Code Playgroud)

从表单中获取值:

$('#myForm .radio1:checked').val();
Run Code Online (Sandbox Code Playgroud)

如果您没有发布表单,我会使用以下内容进一步简化:

<input type='radio' class='radio1' value='val1' />
<input type='radio' class='radio1' value='val2' />
Run Code Online (Sandbox Code Playgroud)

然后获取选中的值变为:

    $('.radio1:checked').val();
Run Code Online (Sandbox Code Playgroud)

在输入上有一个类名允许我轻松设置输入样式...


rmb*_*chi 23

在我的情况下,我有一个形式的两个单选按钮,我想知道每个按钮的状态.以下这个对我有用:

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


    
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)


小智 22

试试这个。这对我有用

$('input[type="radio"][name="name"]:checked').val();
Run Code Online (Sandbox Code Playgroud)


Fra*_*ado 16

JSF生成的单选按钮(使用<h:selectOneRadio>标记)中,您可以执行以下操作:

radiobuttonvalue = jQuery("input[name='form_id\:radiobutton_id']:checked").val();
Run Code Online (Sandbox Code Playgroud)

其中selectOneRadio ID是radiobutton_id,表单ID是form_id.

请确保使用name而不是id,因为jQuery使用此属性(名称由JSF自动生成,类似于控件ID).


小智 15

另外,检查用户是否未选择任何内容.

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


Mat*_*zen 15

我写了一个jQuery插件,用于设置和获取单选按钮值.它还尊重他们的"改变"事件.

(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);
Run Code Online (Sandbox Code Playgroud)

将代码放在任何位置以启用插件.然后享受!它只是覆盖默认的val函数而不会破坏任何东西.

你可以访问这个jsFiddle来试一试它,看看它是如何工作的.

小提琴


小智 14

如果您有单个形式的多个单选按钮,那么

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

var myRadio2 = $('input[name=radioButtonName2]');
var value2 = myRadio2.filter(':checked').val();
Run Code Online (Sandbox Code Playgroud)

这对我有用.


小智 12

 $(".Stat").click(function () {
     var rdbVal1 = $("input[name$=S]:checked").val();
 }
Run Code Online (Sandbox Code Playgroud)


Man*_*noj 12

这很好用

$('input[type="radio"][class="className"]:checked').val()
Run Code Online (Sandbox Code Playgroud)

工作演示

:checked选择工程checkboxes,radio buttons并选择要素.仅对于选择元素,请使用:selected选择器.

API for :checked Selector


Rod*_*ias 11

要获取使用类的所选无线电的值:

$('.class:checked').val()
Run Code Online (Sandbox Code Playgroud)


小智 10

用这个:

value = $('input[name=button-name]:checked').val();
Run Code Online (Sandbox Code Playgroud)


Laf*_*ziq 10

我用这个简单的脚本

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


Cod*_*Spy 8

演示:https://jsfiddle.net/ipsjolly/xygr065w/

	$(function(){
	    $("#submit").click(function(){      
	        alert($('input:radio:checked').val());
	    });
	 });
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)


Ran*_*orn 6

如果你在1个表单上只有一组单选按钮,那么jQuery代码就像这样简单:

$( "input:checked" ).val()
Run Code Online (Sandbox Code Playgroud)


Rya*_*yan 5

我已经发布了一个库来帮助解决这个问题.实际上,拉出所有可能的输入值,但也包括检查了哪个单选按钮.您可以访问https://github.com/mazondo/formalizedata查看

它会给你一个答案的js对象,所以形式如下:

<form>
<input type="radio" name"favorite-color" value="blue" checked> Blue
<input type="radio" name="favorite-color" value="red"> Red
</form>
Run Code Online (Sandbox Code Playgroud)

会给你:

$("form").formalizeData()
{
  "favorite-color" : "blue"
}
Run Code Online (Sandbox Code Playgroud)


小智 5

JQuery 获取表单中的所有单选按钮和选中的值。

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


Bin*_* Ho 5

使用$('input[name="radioName"]').filter(":checked").val();对我来说是最好的方法。

测试过,这个有效

形式

<form id="myForm">
  <input type="radio" name="radioName" value="Option1"> Option1
  <input type="radio" name="radioName" value="Option2" checked> Option2
  <input type="radio" name="radioName" value="Option3"> Option3
</form>
Run Code Online (Sandbox Code Playgroud)

jQuery

$(document).ready(function() {
  $('input[name="radioName"]').on('change', function() {
     const val = $(this).filter(":checked").val();
     alert(val);
  })

  // First load check
  const val = $('input[name="radioName"]').filter(":checked").val();
  alert(val);
});

Run Code Online (Sandbox Code Playgroud)

示例如下: https: //codepen.io/abinhho/pen/mdLrqbX