jQuery获取选中单选框的值

788

问题陈述很简单。我需要查看用户是否从一组单选按钮中选择了一个单选按钮。组中的每个单选按钮共享相同的id。

问题在于我无法控制表单生成的方式。以下是单选按钮控件代码的示例:

<input type="radio" name='s_2_1_6_0' value='Mail copy to my bill to address' id = "InvCopyRadio" onchange = 'SWESubmitForm(document.SWEForm2_0,s_4,"","1-DPWJJF")' style="height:20;width:25" tabindex=1997 >

另外,当选择一个单选按钮时,它不会向控件添加"checked"属性,只有文本已选中(我猜只是具有属性值为"checked"的属性)。以下是选定单选控件的外观:

<input type="radio" checked name='s_2_1_6_0' value='Mail copy to my bill to address' id = "InvCopyRadio" onchange = 'SWESubmitForm(document.SWEForm2_0,s_4,"","1-DPWJJF")' style="height:20;width:25" tabindex=1997 >

有谁能帮我编写jQuery代码,以获取选中单选按钮的值吗?


92
你有多个具有相同ID的元素?那真是太糟糕了。 - Matt Ball
2
可能是重复的问题:如何通过jQuery获取选中的单选框? - Alex Angas
它们都有相同的ID,这是如何工作的?通过ID进行评估时,评估不会在第一个匹配的元素处停止吗?这里的目的是什么,它们是在不同时间显示的动态元素吗? - Mark Carpenter Jr
3
ASP.NET MVC的@Html.RadioButtonFor辅助工具将生成所有单选按钮相同的id。糟糕。 - Triynko
尝试一下我的解决方案,它是所有解决方案中最好的。:: https://dev59.com/qWoy5IYBdhLWcg3wWcig#70798467 - pankaj
33个回答

1636

只需使用。

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

这很容易。


35
请不要忘记引号: $("input[name='" + fieldName + "']:checked").val(); 该代码为jQuery语法,用于获取指定名称(fieldName)的选中单选框的值。 - Atara
7
为什么返回的是“on”,而不是我在HTML中指定的值?编辑:因为我没有在我的值周围加上引号。 - Vincent
4
$('input[name="name_of_your_radiobutton"]:checked').val(); - Sameera Prasad Jayasinghe
1
请注意,如果没有选择任何按钮,则会返回“null”,这是合乎逻辑的,但有时候当您习惯于通过.val()调用看到""作为默认值时,可能会感到困惑。 - xji
1
这是正确的,但是对于那些想要尽可能减小脚本大小的人来说,您可以在每个单选按钮上使用一个类(例如class="mo"),然后使用$(".mo:checked").val();。当然,这取决于您有多少单选按钮。如果像我一样,您会关注您向用户发送的每个数据字节,那么了解这两种方法都是有用的。 - Pete - iCalculator
显示剩余3条评论

351

首先,不能有多个具有相同id的元素。我知道你说你无法控制表单是如何创建的,但是...尝试从所有单选按钮中删除所有id,或使它们唯一。

要获取所选单选按钮的值,请使用:checked过滤器按名称选择它。

var selectedVal = "";
var selected = $("input[type='radio'][name='s_2_1_6_0']:checked");
if (selected.length > 0) {
    selectedVal = selected.val();
}

编辑

所以你无法控制这些名称。在这种情况下,我建议将这些单选按钮都放置在一个名为radioDiv

元素中,然后稍微修改你的选择器:

var selectedVal = "";
var selected = $("#radioDiv input[type='radio']:checked");
if (selected.length > 0) {
    selectedVal = selected.val();
}

当然可以有多个具有相同ID的元素。虽然这是被禁止的,你不能使用这些ID,但完全有可能这样做,并且你仍然可以使用其他方式来寻址这些元素,就像你展示的那样。 - ygoe

91

获取选中的单选按钮的最简单方法如下:

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

选择器之间不应使用空格。


这是最直接的选择。 - andreszs

52
$("#radioID") // select the radio by its id
    .change(function(){ // bind a function to the change event
        if( $(this).is(":checked") ){ // check if the radio is checked
            var val = $(this).val(); // retrieve the value
        }
    });

请确保将此代码放在 DOM 就绪函数 ($(function(){...});$(document).ready(function(){...});) 中运行。


我总是在这段代码中得到一个空值。我猜这是因为我没有具有值检查的属性,只有一个文本检查(我不确定是否可以将其视为属性)。 - user1114212
你是通过它的ID选择单选按钮吗?你将radioID更改为它的ID了吗? - Purag

41
<input type="radio" class="radioBtnClass" name="numbers" value="1" />1<br/>
<input type="radio" class="radioBtnClass" name="numbers" value="2" />2<br/>
<input type="radio" class="radioBtnClass" name="numbers" value="3" />3<br/>

这将返回已选中的单选按钮的值。

if($("input[type='radio'].radioBtnClass").is(':checked')) {
    var card_type = $("input[type='radio'].radioBtnClass:checked").val();
    alert(card_type);
}

更多详细信息请查看我的博客:https://webexplorar.com/jquery-get-selected-radio-button-value/


1
对于无法获取输入值的人,需要在它们上面设置相同的名称,然后将值设置为1、2、3等。如果您不设置值,则默认值为“on”。这个答案帮助了我。 - Yağmur Kopar

37
  1. 在你的代码中,jQuery只会查找第一个名称为q12_3且值为1的输入框。你需要查找一个名称为q12_3且被选中 :checked 的输入框。
$(function(){
    $("#submit").click(function() {     
        alert($("input[name=q12_3]:checked").val());
    });
});
  1. 请注意,上述代码与使用 .is(":checked") 不同。jQuery 的 is() 函数返回一个布尔值(true 或 false),而不是一个元素。

26

这段代码有效。

var radioValue = $("input[name='gender']:checked").val();

这是与2014年此高赞答案相同的解决方案,只是按钮名称不同。其他几个答案也提到了这一点。回答已有答案的旧问题时,请确保您提供的是新颖的解决方案或比现有答案更好的解释。 - Eric Aya

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

用于嵌套属性

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

不要忘记在名称中使用单引号


24

获取所有单选按钮:

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

筛选出被勾选的项目

radios.filter(":checked");

您可以找到单选按钮的值的另一种方法是

var RadeoButtonStatusCheck = $('form input[type=radio]:checked').val();

3
我使用 $('[name=your_inputs_names]:checked').val(),因为它们始终具有相同的唯一名称。 - vladkras
4
好的使用方法是 .filter() - Mark Carpenter Jr
2
那个 .filter()。我希望这个答案能够排在最前面。 - Yusril Maulidan Raji
这绝对是整个页面上最好的答案。OP问如何从一组单选按钮中获取一个单选按钮。除非您只有1个单选按钮,否则上面的任何答案都不起作用,因为您的单选按钮具有唯一的ID(就是这样)。 - devon t

18

要获取选定单选按钮的值,请使用RadioButtonName和包含单选按钮的表单ID。

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

仅通过OR

$('form input[type=radio]:checked').val();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接