jQuery提交表单时为已勾选复选框的前级隐藏输入赋值异常问题
问题根因
- 选择器匹配逻辑错误:
.prev()方法仅能匹配当前节点的直接前一个同级元素,你的复选框被包裹在<td>标签内,和.checkboxHandler隐藏输入不属于同一父节点,原有代码根本无法定位到对应的隐藏输入,赋值操作从未生效,所以提交的值一直是初始设置的0。 - 缺少未选中状态的重置逻辑:原有代码仅处理了勾选状态的赋值,没有覆盖取消勾选的场景,即使选择器修复后,也会出现取消勾选后提交值仍为1的错误。
修复后可直接使用的代码
$(document).ready(function() { $('#frm').submit(function() { // 遍历所有表单内的复选框 $('input[type="checkbox"]').each(function() { // 先定位到复选框所属的td,再查找td前对应的隐藏输入 const $targetHidden = $(this).parent('td').prev('.checkboxHandler'); // 按当前复选框状态赋值 $targetHidden.val($(this).prop('checked') ? 1 : 0); }); }); });
该实现天然支持动态新增的输入行,只要新增行保持隐藏输入在前、td包裹复选框在后的结构,无需额外修改代码即可适配。
内容的提问来源于stack exchange,提问作者inNeedOfHelp
相关产品推荐
相关产品推荐

