在jQuery中,如何通过其name属性选择元素?


328

我的网页中有3个单选按钮,如下所示:

<label for="theme-grey">
  <input type="radio" id="theme-grey" name="theme" value="grey" />Grey</label>
<label for="theme-pink">
  <input type="radio" id="theme-pink" name="theme" value="pink" />Pink</label>
<label for="theme-green">
  <input type="radio" id="theme-green" name="theme" value="green" />Green</label>

在jQuery中,当单击这三个按钮中的任何一个时,我想获取所选单选按钮的值。在jQuery中,我们有id(#)和class(。)选择器,但是如果我想按名称查找单选按钮,该怎么办呢?

$("<radiobutton name attribute>").click(function(){});

请告诉我如何解决这个问题。


5
你不严格需要指定“的”属性,只要字段包括其相应的“标签”标签之间
卢修斯

2
jQuery 1.8及更高版本对此进行了更改。...我在下面的解释中添加了答案。
凯文·拉布兰奇

3
A1rPun的答案是最好的:非jQuery单行代码!
2014年

1
使用单选按钮维护我的js应用程序中的状态。在检查此线程之前调试了一个小时。检查一下
Prasanth 2015年

在普通JS中:document.querySelectorAll("input:radio[name=theme]").forEach(function() { this.onclick=function() { var value = this.value; }; });
mplungjan

Answers:


339

应该做到这一点,所有这些都在文档中,该文档具有与此类似的示例:

$("input[type='radio'][name='theme']").click(function() {
    var value = $(this).val();
});

我还应该注意,您在该代码段中有多个相同的ID。这是无效的HTML。使用类将元素集而不是ID分组,因为它们应该是唯一的。


4
@gargantaun-如果单击单选按钮,会发生什么?
Paolo Bergantino'3

11
好点子。尽管仍然不是“如何在jQuery中使用其名称获取选定的单选按钮值?”。它是“如何在使用jQuery单击时获取选定的单选按钮值?”。差别不大,但是让我有些困惑。
gargantuan 2012年

1
根据问题,这个答案是正确的。在全球范围内,我们寻求克莱顿的答案。
克里希(Krish)2012年

8
从jQuery 1.8开始,使用[type='radio']代替:radiojQuery可以利用本机DOM querySelectorAll()方法提供的性能提升。
亚当

2
@PaoloBergantino答案是100%正确的,因为它在单击所需的单选按钮后返回了值。@ Clayton Rabenda答案没有给出此值。
Azam Alvi

185

要确定选中了哪个单选按钮,请尝试以下操作:

$('input:radio[name=theme]').click(function() {
  var val = $('input:radio[name=theme]:checked').val();
});

将捕获该组中所有单选按钮的事件,并将所选按钮的值放入val中。

更新:发布后,我认为上述Paolo的答案更好,因为它使用的DOM遍历更少。我让这个答案站起来,因为它显示了如何以跨浏览器兼容的方式获取所选元素。


3
别问我如何阅读问题,这就是我需要的答案。:checked是我在方程式中缺少的内容。谢谢。
HPWD 2012年

9
从jQuery 1.8开始,使用[type='radio']代替:radiojQuery可以利用本机DOM querySelectorAll()方法提供的性能提升。
亚当

我在冒号之后和错误地“检查”之前给了一个空格。因此,请确保没有空间。
抽烟的猴子

对于那些不想从click事件处理程序中获取值的用户来说,这是一个有用的答案。否则,您必须使用:checked来查找选中了哪个按钮,例如,使用表单提交事件处理程序,其中this关键字不映射到单击的按钮。
che-azeh 2015年

155
$('input:radio[name=theme]:checked').val();

我继续简单地进行操作$("input[name=theme]:checked").val();(省去了:radio部分,似乎在IE,FF,Safari和Chrome中都可以正常工作。我不得不使用jQ v 1.3 ...当然,这意味着只有一个名为“主题”的元素
morespace54 2014年

2
这是IMO的最佳答案,它说“请给我这个名称的CHECKED无线电值”。无需举办活动等
ProVega 2015年

39

另一种方式

$('input:radio[name=theme]').filter(":checked").val()

1
如果您有兴趣获取值+1,则此选项非常有用
swapnesh 2014年

这很可靠,因为您可以使用变量来保留单选按钮,例如$themeRadios = $('input:radio[name=theme'])设置任何事件处理程序,然后通过使用过滤器(例如)来获取值$themeRadios.filter(":checked").val()
约书亚·品特

我喜欢这个解决方案。
亚伯2015年

20

这对我来说很棒。例如,您有两个具有相同“名称”的单选按钮,而您只想获取选中的按钮的值。您可以尝试这个。

$valueOfTheCheckedRadio = $('[name=radioName]:checked').val();

该答案优于当前接受的230+投票答案的原因是,此答案还说明了用户何时通过键盘与单选按钮进行交互。
gmeben 2015年


13

从jQuery的1.7.2升级到1.8.2后,我在研究错误时发现了这个问题。我添加我的答案是因为jQuery 1.8及更高版本中发生了更改,该更改现在更改了此问题的答案。

使用jQuery 1.8时,它们已弃用伪选择器,如:radio,:checkbox和:text。

要做到以上,现在只需更换:radio[type=radio]

因此,您的答案现在适用于jQuery 1.8及更高版本的所有版本:

$("input[type=radio][name=theme]").click(function() { 
    var value = $(this).val(); 
}); 

你可以阅读有关的1.8自述变化门票具体的这种变化,以及一个明白,为什么上:无线电选择页面下的附加信息部分。


5
:checked不推荐使用。所以您可以使用$("input[type='radio'][name='theme']:checked")
亚当

12

对于不想包含库来做一些非常简单的事情的人:

document.querySelector('[name="theme"]:checked').value;

jsfiddle

有关当前答案的性能概述,请点击此处


1
感谢您的回答。因为我无法以任何形式获得公认的答案来工作。
克里斯·霍尔姆斯

9

如果您想在点击事件之前知道默认选中的单选按钮的值,请尝试以下操作:

alert($(“ input:radio:checked”)。val());


4
<input type="radio" name="ans3" value="help"> 
<input type="radio" name="ans3" value="help1">
<input type="radio" name="ans3" value="help2">

<input type="radio" name="ans2" value="test"> 
<input type="radio" name="ans2" value="test1">
<input type="radio" name="ans2" value="test2">

<script type="text/javascript">
  var ans3 = jq("input[name='ans3']:checked").val()
  var ans2 = jq("input[name='ans2']:checked").val()
</script>

4

如果您想要一个真/假值,请使用以下命令:

  $("input:radio[name=theme]").is(":checked")

3

像这样的东西?

$("input:radio[name=theme]").click(function() { 
 ...
}); 

当您单击任何单选按钮时,我相信它将最终被选中,因此将为选定的单选按钮调用此按钮。


1
从jQuery 1.3开始,@是无效的(甚至在此之前不推荐使用)。 blog.jquery.com/2009/01/05/help-test-jquery-13-beta-2 “旧的XPath样式属性选择器:[@ attr = value]。这些东西已经过时了-我们终于要删除它们了。要解决此问题,只需删除@!”
racerror

3

如果您在同一页面上有多个单选按钮,则也可以尝试以下操作以获取单选按钮的值:

$("input:radio[type=radio]").click(function() {
    var value = $(this).val();
    alert(value);
});

干杯!



1

这对我有用。

HTML:

<input type="radio" class="radioClass" name="radioName" value="1" />Test<br/>
<input type="radio" class="radioClass" name="radioName" value="2" />Practice<br/>
<input type="radio" class="radioClass" name="radioName" value="3" />Both<br/>

jQuery:

    $(“。radioClass”)。each(function(){
        if($(this).is(':checked'))
        alert($(this).val());
    });

希望能帮助到你..


0
$('input:radio[name=theme]').bind(
  'click',
  function(){
    $(this).val();
});

0

您可能会注意到使用类选择器来获取 ASP.NET RadioButton控件的值始终为空,这就是原因。

您可以通过以下方式创建RadioButton控件ASP.NET

<asp:RadioButton runat="server" ID="rbSingle" GroupName="Type" CssClass="radios" Text="Single" />
<asp:RadioButton runat="server" ID="rbDouble" GroupName="Type" CssClass="radios" Text="Double" />
<asp:RadioButton runat="server" ID="rbTriple" GroupName="Type" CssClass="radios" Text="Triple" />

ASP.NET为您呈现以下HTMLRadioButton

<span class="radios"><input id="Content_rbSingle" type="radio" name="ctl00$Content$Type" value="rbSingle" /><label for="Content_rbSingle">Single</label></span>
<span class="radios"><input id="Content_rbDouble" type="radio" name="ctl00$Content$Type" value="rbDouble" /><label for="Content_rbDouble">Double</label></span>
<span class="radios"><input id="Content_rbTriple" type="radio" name="ctl00$Content$Type" value="rbTriple" /><label for="Content_rbTriple">Triple</label></span>

因为ASP.NET我们不想使用RadioButton控件名称或id,因为它们可以出于用户的任何原因而更改(容器名称,表单名称,用户控件名称等),如您在上面的代码中所见。

获取RadioButton使用jQuery 的值的唯一可行的剩余方法是使用css类,如对此完全不相关的问题的答案中所述,如下所示

$('span.radios input:radio').click(function() {
    var value = $(this).val();
});
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.