jQuery动态添加disabled属性不生效问题咨询
问题排查及解决方案
核心错误原因
- 第一:jQuery 不存在
addAttr()方法,你错误调用了不存在的API,导致设置disabled属性的逻辑直接报错中断。正确的属性设置方法为attr(),对于disabled这类布尔属性更推荐使用prop()方法。 - 第二:
val()方法返回的是字符串类型的值,你直接和数字0做相等判断,弱类型比较存在隐式转换的潜在风险,容易出现判断逻辑不符合预期的问题。 - 第三:disabled属于DOM布尔属性,使用
removeAttr()之后再重新用attr()设置的兼容性不如prop()方法稳定,部分场景下HTML属性修改不会同步触发DOM状态更新。
修正后代码
$('#section_option').change(function () { // 转成数字统一判断逻辑,也可以直接和字符串'0'比较 var selectedClass = Number($("#section_option option:selected").val()); if (selectedClass !== 0) { $("#sectionname").prop("disabled", false); $("#sectionname").removeClass("disabled"); } else { $("#sectionname").prop("disabled", true); $("#sectionname").addClass("disabled"); } });
优化说明
- 用
prop()统一管理disabled布尔属性,修改后会直接同步DOM元素的可用状态,不存在属性不生效的问题 - 显式将下拉框选中值转成数字后用全等
===判断,避免隐式类型转换带来的逻辑异常 - 简化了判断分支,不需要多余的
else if(selectedClass == 0)判断,逻辑更简洁
内容的提问来源于stack exchange,提问作者V150N
相关产品推荐
相关产品推荐

