使用JavaScript检查单选按钮


95

由于某种原因,我似乎无法弄清楚。

我的html中有一些单选按钮,可以切换类别:

<input type="radio" name="main-categories" id="_1234" value="1234" /> // All
<input type="radio" name="main-categories" id="_2345" value="2345" /> // Certain category
<input type="radio" name="main-categories" id="_3456" value="3456" /> // Certain category
<input type="radio" name="main-categories" id="_4567" value="4567" /> // Certain category

用户可以选择自己想要的任何一个,但是当某个事件触发时,我想设置1234为选中单选按钮,因为这是默认的选中单选按钮。

我已经尝试过这个版本(使用和不使用jQuery):

document.getElementById('#_1234').checked = true;

但是它似乎没有更新。我需要对其进行明显更新,以便用户可以看到它。有人可以帮忙吗?

编辑:我只是累了而忽略了#,感谢您指出,那个和$.prop()


检查这个StackOverflow的问题:如何检查与jQuery单选按钮] [1] [1]:stackoverflow.com/questions/5665915/...
曼迪Schoep

8
更改为document.getElementById('_1234').checked = true;
stackErr 2014年

1
@stackErr,没有#
Tim Seguine

抱歉,复制粘贴错误。现在更新。@FelipeKM然后请帮助我,我还没有找到一个可以帮助的人。
ptf

@kjelelokk检查我的评论或Pointys答案
stackErr

Answers:


151

不要将CSS / JQuery语法(#用于标识符)与本机JS混合使用。

本机JS解决方案:

document.getElementById("_1234").checked = true;

jQuery解决方案:

$("#_1234").prop("checked", true);


1
从技术上讲,它是CSS选择器语法。jQuery刚刚借用并扩展了它
Tim Seguine 2014年

jQuery是querySelector我想像得到的。
安迪

.attr("checked", "checked")
ma77c

@Andy-Sizzle从2006年初开始在jQuery中使用。(en.wikipedia.org/wiki/JQuery#History)。querySelector直到2009年才在浏览器中发布,并且直到那之后的一段时间才被开发人员广泛使用。我从来没有这么多使用过jQuery,但是它极大地影响了JS的发展。
鲁宁

这将设置复选框,但不一定触发相关事件。用户单击单选按钮会触发什么事件?
robisrob

16

如果要设置“ 1234”按钮,则需要使用其“ id”:

document.getElementById("_1234").checked = true;

使用浏览器API(“ getElementById”)时,不使用选择器语法;您只需传递所需的实际“ id”值即可。您可以将选择器语法与jQuery或.querySelector()和一起使用.querySelectorAll()


每个人都通过ID获取元素我有多个同名的单选按钮。我认为大多数人都需要按名称选择一组无线电,然后根据价值检查其中一个。
Ndm Gjr,

@NadeemGorsi的“ id”属性不能由多个元素共享。在给定页面上,所有“ id”值都必须唯一。
Pointy

9

今天,在2016年,document.querySelector无需知道ID 就可以节省使用时间(特别是如果您有两个以上的单选按钮):

document.querySelector("input[name=main-categories]:checked").value

3
好的,但是我该如何获得相反的效果或根据价值来检查收音机呢。这实际上是个问题。
Ndm Gjr,

1
@NadeemGorsi我提供了一个使用QuerySelector选择或“检查”单选按钮的答案
kevinf

6

最简单的方法可能是使用jQuery,如下所示:

$(document).ready(function(){
  $("#_1234").attr("checked","checked");
})

这将添加一个新属性“ checked”(在HTML中不需要值)。只要记住包括jQuery库:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

或者只是$("#_1234").prop("checked", true)
不确定,

3

通过使用document.getElementById()函数,您不必#在元素的id之前传递。

码:

document.getElementById('_1234').checked = true;

演示: JSFiddle


3

我可以通过在Web Extension选项页面中的Firefox 72中使用以下Javascript代码来选择(选中)单选输入按钮以加载值:

var reloadItem = browser.storage.sync.get('reload_mode');
reloadItem.then((response) => {
    if (response["reload_mode"] == "Periodic") {
        document.querySelector('input[name=reload_mode][value="Periodic"]').click();
    } else if (response["reload_mode"] == "Page Bottom") {
        document.querySelector('input[name=reload_mode][value="Page Bottom"]').click();
    } else {
        document.querySelector('input[name=reload_mode][value="Both"]').click();
    }
});

要保存该值的关联代码为:

reload_mode: document.querySelector('input[name=reload_mode]:checked').value

给定HTML如下所示:

    <input type="radio" id="periodic" name="reload_mode" value="Periodic">
    <label for="periodic">Periodic</label><br>
    <input type="radio" id="bottom" name="reload_mode" value="Page Bottom">
    <label for="bottom">Page Bottom</label><br>
    <input type="radio" id="both" name="reload_mode" value="Both">
    <label for="both">Both</label></br></br>
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.