如何使用jQuery在条件成立时禁用checkbox?代码触发条件后复选框未禁用
问题原因
- 执行顺序错误:你在
append将拼接的表格元素插入DOM之前就执行了checkbox禁用代码,此时要操作的checkbox还不存在于页面中,jQuery无法选中目标元素,设置自然不生效。 - 选择器语法错误:你用的
$('.checkBoxClass:input([value=' + t11 + ')')语法不符合jQuery选择器规范,正确的属性选择器不需要多余括号,格式应为input[value="属性值"]。 - 数值比较隐患:t8、t9可能是字符串类型,直接用
==比较可能出现类似"283.5" != "283.50"的误判,建议统一转成相同精度的数值再比较。
最优解决方案(拼接HTML时直接添加禁用属性,性能最高)
在拼接checkbox的HTML代码前先判断条件,符合要求直接加disabled属性,不需要后续DOM操作:
// 在你的trtoggle拼接逻辑前加这段判断 let disabledAttr = '' // 统一转成两位小数的数值比较,避免类型/精度问题 if (parseFloat(t8).toFixed(2) === parseFloat(t9).toFixed(2)) { disabledAttr = 'disabled' } // 拼接input的时候插入disabledAttr变量即可 trtoggle += "<tr><td class='invoicedate_check'>" + t6 + "</td><td class='invoiceno_check'>" + t7 + "</td><td style='text-align: right;' class='invoiceamt_check'>" + t8 + "</td><td style='text-align: right;' class=''>" + t9 + "</td><td style='text-align: right;' class=''>" + balance + "</td><td class='checkBoxtd" + t11 + "'><input type='checkbox' " + disabledAttr + " class='checkBoxClass checkBoxClassse" + t11 + "' id='checkbox"+t11+"' name='myTextEditBox[]' value='" + t11 + "'/> Select</td></tr>";
原来的if(t8 == t9)里的那段$('.checkBoxClass:input([value=' + t11 + '])').prop('disabled', true);代码直接删除即可。
备选方案(append之后再批量设置)
如果要保留单独设置的逻辑,就把禁用代码移到append执行之后,修改选择器写法:
// 先把元素插入DOM $(".tableinvoice_proj").last().append(trtoggle); // 再批量处理禁用逻辑,也可以直接通过余额为0判断,不需要额外存t8t9 $('.tableinvoice_proj:last .checkBoxClass').each(function(){ const balance = parseFloat($(this).closest('tr').find('td:eq(4)').text()).toFixed(2) if(balance === '0.00'){ $(this).prop('disabled', true) } })
内容的提问来源于stack exchange,提问作者Remesh sree
相关产品推荐
相关产品推荐

