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

Struts2中如何实现<s:checkbox>复选框的动态启用与禁用?

问题根因
  • body标签使用了错误的自闭合写法<body onload="myTest()" />,所有页面内容实际不在body节点内部,onload事件触发时复选框还未完成DOM渲染,document.getElementById('box1')返回空值,逻辑判断始终命中禁用box2的分支,导致box2一直不可用。
  • 仅在页面加载时触发函数无法联动box1的切换操作,需要额外监听box1的状态变化事件,才能实现选中box1时实时启用box2的效果。
修复步骤

1. 调整JSP页面结构

修正body标签的闭合方式,同时给box1添加状态变化监听:

<body onload="myTest()">
<div class="form-group row">
    <label class="col-sm-3 col-form-label required">
        <s:text name="box1" />
    </label>
    <div class="col-sm-9">
        <s:checkbox id="box1" name="box1" onchange="myTest()"> </s:checkbox>
    </div>
</div>
<div class="form-group row">
    <label class="col-sm-3 col-form-label required">
        <s:text name="box2" />
    </label>
    <div class="col-sm-9">
        <s:checkbox id="box2" name="box2"></s:checkbox>
    </div>
</div>
</body>

2. 优化JS逻辑(可选)

可以添加节点存在性判断,避免DOM未加载完成时控制台报错:

function myTest() {
  const checkBox1 = document.getElementById('box1');
  // 节点不存在时直接终止逻辑
  if (!checkBox1) return;
  $('#box2').prop('disabled', !checkBox1.checked);
}

注意:请确认页面已经提前引入jQuery库,否则$('#box2')相关的逻辑会执行失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:15:04