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

实现报告组单选功能:选中一个报告时禁用其他报告及选项

实现单报告选择及组间禁用功能

没问题,我帮你完善代码来实现这个需求。先明确下核心需求:

选中某报告(如Report 1)的主复选框时,其他所有报告及其对应的选项需被取消选中并禁用;用户每次仅能选择一个报告,仅该报告的对应选项可被选择。

以下是完整的修改后代码,包含HTML和JavaScript:

<!DOCTYPE html>
<html>
<head>
    <title>Report Selection</title>
    <script>
        // 跨浏览器事件监听工具函数
        function listen(element, event, callback) {
            if (element.attachEvent) {
                element.attachEvent('on' + event, callback);
            } else {
                element.addEventListener(event, callback);
            }
        }

        // 等待DOM加载完成后再执行逻辑
        document.addEventListener('DOMContentLoaded', function() {
            var form = document.querySelector('#myForm');
            
            listen(form, 'click', function(event) {
                var target = event.srcElement || event.target;
                
                // 只处理复选框元素,忽略其他点击
                if (target.type !== 'checkbox') return;
                
                var currentGroupName = target.getAttribute('name');
                // 判断当前点击的是否是报告的主复选框(文本以Report开头)
                var isMainReport = target.parentElement.textContent.trim().startsWith('Report');
                
                // 仅当点击主报告复选框时执行组间控制逻辑
                if (isMainReport) {
                    var isChecked = target.checked;
                    // 所有报告组的名称集合
                    var allGroupNames = ['check1', 'check2', 'check3'];
                    
                    allGroupNames.forEach(function(groupName) {
                        // 跳过当前选中的报告组
                        if (groupName === currentGroupName) return;
                        
                        // 获取其他组的所有复选框
                        var otherCheckboxes = form.querySelectorAll('input[name="' + groupName + '"]');
                        
                        otherCheckboxes.forEach(function(checkbox) {
                            // 取消选中并禁用其他组的所有复选框
                            checkbox.checked = false;
                            checkbox.disabled = isChecked;
                        });
                    });
                    
                    // 如果取消当前主报告的选中状态,恢复所有复选框的可用状态
                    if (!isChecked) {
                        var allCheckboxes = form.querySelectorAll('input[type="checkbox"]');
                        allCheckboxes.forEach(function(checkbox) {
                            checkbox.disabled = false;
                        });
                    }
                }
            });
        });
    </script>
</head>
<body>
    <form id="myForm">
        <table>
            <tr>
                <td><input type='checkbox' name='check1' value='1'>Report 1</td>
                <td><input type='checkbox' name='check1' value='2'>R1 Option 1</td>
                <td><input type='checkbox' name='check1' value='3'>R1 Option 2</td>
                <td><input type='checkbox' name='check1' value='4'>R1 Option 3</td>
            </tr>
            <tr>
                <td><input type='checkbox' name='check2' value='5'>Report 2</td>
                <td><input type='checkbox' name='check2' value='6'>R2 Option 1</td>
                <td><input type='checkbox' name='check2' value='7'>R2 Option 2</td>
                <td><input type='checkbox' name='check2' value='8'>R2 Option 3</td>
            </tr>
            <tr>
                <td><input type='checkbox' name='check3' value='9'>Report 3</td>
                <td><input type='checkbox' name='check3' value='10'>R3 Option 1</td>
                <td><input type='checkbox' name='check3' value='11'>R3 Option 2</td>
                <td><input type='checkbox' name='check3' value='12'>R3 Option 3</td>
            </tr>
        </table>
    </form>
</body>
</html>

关键逻辑说明

  • DOM加载时机:用DOMContentLoaded确保页面元素全部加载后再绑定事件,避免出现找不到元素的错误。
  • 主报告识别:通过复选框所在单元格的文本是否以Report开头,精准定位每个组的主开关复选框。
  • 组间控制:
    • 选中主报告时:遍历其他所有报告组,将组内所有复选框取消选中并禁用,保证用户只能操作当前选中报告的选项。
    • 取消主报告选中时:恢复所有复选框的可用状态,允许用户重新选择其他报告。
  • 跨浏览器兼容:保留了你原有的listen函数,确保在IE等老旧浏览器中也能正常运行。

额外优化

  • 修正了原HTML中Report 3的value重复问题,给每个复选框设置了唯一的value,避免后续数据处理时出现混淆。
  • 添加了页面标题,让页面结构更规范。

内容的提问来源于stack exchange,提问作者J C

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:31:01