You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Checkbox名称改为数组形式后,选中禁用其他复选框的JS修复方案

解决复选框name为sessionTime[]时的选择器语法错误及功能修复

这个问题我之前碰到过,核心原因是方括号[]在jQuery/CSS选择器里属于特殊字符,直接写input[name=sessionTime[]]会被解析成属性选择器的语法片段,导致浏览器抛出语法错误。下面给你两种修复方式,以及优化后的完整代码:

1. 修复选择器的语法问题

最直观且易读的方式是用双引号包裹name属性值,让jQuery把整个sessionTime[]当作完整的属性值解析,而不是拆分方括号:

// 正确的选择器写法
$('input[name="sessionTime[]"]')

如果不想用引号,也可以转义方括号(但可读性较差,不推荐):

// 转义后的选择器,\\是为了在JS字符串里表示单个\
$('input[name=sessionTime\\[\\]]')

2. 优化禁用/启用逻辑(推荐用.prop()代替.attr())

原代码里用.attr()操作disabled属性,对于这种布尔类型的DOM属性,更推荐使用.prop()方法——因为.attr()是操作HTML标签上的属性,而.prop()直接操作DOM元素的状态,处理禁用/选中这类状态时更可靠。

完整修正后的JS代码

$('input[name="sessionTime[]"]').change(function(){
  if($(this).is(':checked')){
    // 先禁用所有同名复选框
    $('input[name="sessionTime[]"]').prop('disabled', true);
    // 重新启用当前选中的复选框
    $(this).prop('disabled', false);
    console.log('其他时段选项已禁用');
  } else {
    // 取消选中时,恢复所有复选框的可用状态
    $('input[name="sessionTime[]"]').prop('disabled', false);
    console.log('所有时段选项已启用');
  }
});

补充说明

如果你的需求是只能选择一个时段,其实原生的radio按钮(单选按钮)更符合语义,而且不需要额外写JS逻辑。但如果必须用复选框(比如需要支持“取消选择”的操作),上面的代码就能完美实现你的需求。

内容的提问来源于stack exchange,提问作者Milan Bastola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:08:42