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

Thymeleaf循环生成的动态输入框无法全部禁用问题求助

解决Thymeleaf动态生成输入框的禁用问题

问题根源

你当前代码里,循环生成的每一行输入框都用了重复的id="quantity_in"和id="unit_price",但HTML规范要求id必须唯一,所以getElementById只会找到页面上第一个匹配的元素,自然只有第一行输入框会被禁用。

修复步骤

1. 调整HTML代码(推荐:依赖类选择器,去掉重复id)

不需要给每个输入框加重复id,直接用已有的类名即可:

<tr th:each="StockinReport,iStat:${listStockinReport.getStockinDetail()}" name="line_items">
  <td>
    <input type="text" class="form-control quantity_in" name="quantity_in">
  </td>
  <td>
    <input type="text" class="form-control unit_price" name="unit_price">
  </td>
</tr>

如果一定要保留id,可以用Thymeleaf的索引生成唯一id(后续JS处理稍繁琐):

<input type="text" class="form-control quantity_in" name="quantity_in" th:id="'quantity_in_' + ${iStat.index}">
<input type="text" class="form-control unit_price" name="unit_price" th:id="'unit_price_' + ${iStat.index}">

2. 修改JavaScript代码,批量禁用所有输入框

用document.querySelectorAll选中所有目标元素,遍历设置禁用属性:

// 选中所有quantity_in类的输入框并禁用
document.querySelectorAll('.quantity_in').forEach(input => {
  input.disabled = true;
});

// 选中所有unit_price类的输入框并禁用
document.querySelectorAll('.unit_price').forEach(input => {
  input.disabled = true;
});

也可以按表格行批量处理(确保每行输入框对应):

document.querySelectorAll('tr[name="line_items"]').forEach(row => {
  row.querySelector('.quantity_in').disabled = true;
  row.querySelector('.unit_price').disabled = true;
});

额外提示

如果需要页面加载完成后立即禁用,要把JS代码放在页面底部,或者用DOMContentLoaded事件包裹,确保DOM已渲染完成:

document.addEventListener('DOMContentLoaded', function() {
  // 禁用代码写在这里
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:01:21