jQuery设置单选按钮


134

我正在尝试设置一个单选按钮。我想使用值或ID进行设置。

这就是我尝试过的。

$('input:radio[name=cols]'+" #"+newcol).attr('checked',true);

newcol 是单选按钮的ID。

可能需要进行一些编辑。

有两组单选框,一组带有列,另一组带有行。因此,我明白了不使用ID的意义。我的错。所以我有一个例子:

<input type="radio" name="rows" class="listOfCols" 
   style="width: 50%; " value="Site"></input>

<input type="radio" name="cols" class="listOfCols" 
   style="width: 50%; "  value="Site"></input>

删除了ID,我需要设置正确的ID。


Answers:


196

您的选择器将查找input:radio[name=cols]ID为newcol(以及该变量的值)的元素的后代。

请尝试以下操作(因为无论如何您都是通过ID进行选择):

$('#' + newcol).prop('checked',true);

这是一个演示:http : //jsfiddle.net/jasper/n8CdM/1/

另外,从jQuery 1.6开始,更改属性的最佳方法是.prop()http : //api.jquery.com/prop


5
propvs +1 attrattr不推荐使用的属性,不再在jQuery 2.0中工作))
gentnkoa 2013年

87

我在这里找到了答案:https : //web.archive.org/web/20160421163524/http :
//vijayt.com/Post/Set/RadioButton-value-using-jQuery

基本上,如果要检查一个单选按钮,则必须将值作为数组传递:

$('input:radio[name=cols]').val(['Site']);
$('input:radio[name=rows]').val(['Site']);

Hello That Link中没有建议内容。你们为什么一直拒绝我删除链接的修改。它不包含任何有关此事的信息。
Menuka Ishan

@MenukaIshan,重点是:功劳。该链接可在web.archive.org中找到,并且是第一次编写该链接的人,而我从中得到答案的人必须得到它的称赞。不要删除该链接,如果您想查看原始帖子,请复制并粘贴该链接(我不知道为什么它会转到旧页面而不是web.archive.org)
Chococroc

2
@Chococroc您尚未正确配置问题的Markdown。我看到了Web存档版本并正确链接了它。审核后,它将正确链接到该网站。
Menuka Ishan

2
看来这应该是可接受的答案,因为它是jQuery文档中
plong0

15

在选择器中,您似乎正在尝试获取具有给定ID的单选按钮的某些嵌套元素。如果要检查单选按钮,则应在选择器中选择此单选按钮,而不要选择其他任何东西:

$('input:radio[name="cols"]').attr('checked', 'checked');

假设您在标记中具有以下单选按钮:

<input type="radio" name="cols" value="1" />

如果您的单选按钮具有ID:

<input type="radio" name="cols" value="1" id="myradio" />

您可以直接使用id选择器:

$('#myradio').attr('checked', 'checked');

如果有多个收音机的cols名称,则$('input:radio[name="cols"]').attr('checked', 'checked');仅选择最后一个。它将在每个代码上运行代码,但是每次您设置checked属性时,先前设置的元素都会被取消设置。这是一个演示:jsfiddle.net/jasper/n8CdM/2
Jasper

@Jasper,是的,是的。这就是为什么我建议使用id选择器的原因。
Darin Dimitrov'3

12

您可以尝试以下代码:

$("input[name=cols][value=" + value + "]").attr('checked', 'checked');

这将设置检查的单选列的属性和指定的值。


1
...the most important concept to remember about the checked attribute is that it does not correspond to the checked property.来源:api.jquery.com/attr
Jasper

10

你为什么需要'input:radio[name=cols]'。不知道您的html,但是假设id是唯一的,则只需执行此操作即可。

$('#'+newcol).prop('checked', true);

6

试试这个:

$("#" + newcol).attr("checked", "checked");

我在遇到问题attr("checked", true),因此我倾向于改用上述方法。

另外,如果您具有ID,则不需要其他东西进行选择。ID是唯一的。


1
在这种情况下,prop比attr更好
RozzA

attr在jQuery 1.9+ Use prop中消失了。
Mike_Laird

您是对的,但最终取决于您的具体情况。如果您的代码将始终与jQuery 1.6+一起运行,那么prop是可行的方法。但是,如果您的代码可能在较旧的版本上运行,则解决方案并非那么简单。例如,我维护了jQuery PickList插件,并且我们支持jQuery 1.4+,因此,仅使用prop不是一个选择。这是一张公开票,因此,如果您有任何优雅的建议,我希望听到他们的建议。我只是还没有时间去做研究。
Awnry熊

问题在于,即使您的解决方案可能具有更高的向后兼容性,在这种情况下也根本不起作用:选择A,它将获得新的checked="checked"属性,浏览器将其显示为选中状态,然后选择B并发生相同的情况。现在,当您再次选择A时,它将已经具有checked="checked"属性,并且什么都不会改变。作为B的副作用仍然会被选中,不A.
Kyborek

2

由于newcol是单选按钮的ID,因此您可以按以下方式简单使用它。

$("#"+newcol).attr('checked',true);

2

使用.filter()也可以,并且对于ID,值和名称也很灵活:

$('input[name="cols"]').filter("[value='Site']").attr('checked', true);

(在此博客上看到)


1
我相信这是一个同样有效的答案,但是应该使用prop()方法:$('input [name =“ cols”]')。filter(“ [value ='Site']”)。prop('checked ',true);。用户想通过“值或id”进行设置。有时候您可能不想为每个单选选项设置id值,因此按名称获取和按值过滤很有用。
Zac Imboden '18


0

您可以简单地使用:

$("input[name='cols']").click();

0

在这种情况下,所选答案有效。

但是问题是关于根据单选组和动态ID查找元素,答案还可以使显示的单选按钮不受影响。

该行也确实选择了在屏幕上显示更改时所要求的内容。

$('input:radio[name=cols][id='+ newcol +']').click();
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.