JavaScript无法设置Radio checked的问题

该博客探讨了一个在jQuery中使用attr()函数设置radio按钮选中状态时遇到的问题,即无论点击哪个选项,始终只有第一个radio被选中。问题的根源在于attr()不适于处理固有属性。解决方案是改用prop()函数,因为prop()适用于处理如checked这样的布尔属性。文章还强调了prop()和attr()的区别,并提供了修正后的代码示例。

问题描述

// 当选择“微信用户签到抽奖”时,触发
$(’#weChatSignIn’).click(function(){
$(’#wechat’).attr(‘checked’,‘checked’);
});

// 选择“导入名单抽奖”触发
$(’#importNameList’).click(function(){
$(’#import’).attr(‘checked’,‘checked’);
});

效果:无论怎么点击,都是第一个radio选中

原因

这里的主要原因是用attr()函数来设置元素的属性, attr()方法主要是用来处理自定义的DOM属性

解决

换成prop()函数来设置属性就正常了,如下面所示:

// 当选择“微信用户签到抽奖”时,触发
$(’#weChatSignIn’).click(function(){
$(’#wechat’).prop(‘checked’,‘checked’);
});

// 选择“导入名单抽奖”触发
$(’#importNameList’).click(function(){
$(’#import’).prop(‘checked’,‘checked’);
});

prop()方法主要是用来处理本身就带有的固有属性,W3C标准里面说明的属性,或者在IDE里面能够智能提示的属性,都是固有属性,可以结合这篇文章一起看:http://blog.youkuaiyun.com/tangxiujiang/article/details/76735188

prop 还是 attr

具有true和false属性的属性,就使用prop(),比如checked selected disabled等,其他的使用attr()

参考链接

通过点击事件设置radio的checked属性不生效

### 如何通过 `name` 属性检查 Radio 按钮状态 为了验证具有相同名称 (`name`) 的一组单选按钮 (Radio Button),可以使用 JavaScript 来遍历这些元素并检测哪个被选中。下面是一个详细的实现方法: #### 使用原生 JavaScript 实现 可以通过获取表单中的所有同名单选按钮,再逐一判断其是否处于已选中(`checked`)状态。 ```javascript function getCheckedRadioButton(name) { const radios = document.getElementsByName(name); let selectedValue; Array.prototype.forEach.call(radios, function(radio) { if (radio.checked === true) { selectedValue = radio.value; } }); return selectedValue ? selectedValue : null; } ``` 此函数接收一个参数作为要查询的单选按钮组的名字,并返回当前选定项的值;如果没有选项被选中,则返回 `null`[^1]。 当页面加载完成或者特定事件触发时调用上述定义的方法来获取用户的选择情况: ```html <form id="exampleForm"> <input type="radio" name="option" value="first">First<br> <input type="radio" name="option" value="second">Second<br> <input type="radio" name="option" value="third">Third </form> <script> window.onload = function() { console.log(getCheckedRadioButton('option')); // 输出第一个默认选中的value或null }; </script> ``` 对于样式调整方面,在某些情况下可能需要移除内边距(top padding)以使标签文字基线更好地对齐其他组件,这属于 CSS 布局优化的一部分[^2]。 此外,如果希望动态启用/禁止单选按钮,可利用如下提供的辅助函数来进行操作[^3]: ```javascript // 动态设置单选按钮不可用 document.querySelector('[name=option]').disabled = true; // 或者批量处理多个单选按钮 const optionsRadios = document.querySelectorAll('[name=option]'); optionsRadios.forEach(option => option.disabled = true); // 启用指定单选按钮 enableElement(document.querySelector('[name=option][value="second"]')); ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值