jQuery根据接口返回的data.toohigh值禁用PHP页面按钮失效如何解决
问题排查方案
类型匹配问题
你当前用了===严格相等运算符,要求值和类型完全一致。如果接口返回的data.toohigh是字符串类型的"1"(PHP接口不加特殊处理返回的数字通常会被序列化为字符串),和数字1类型不匹配,判断条件就不会触发。
可以改成宽松相等if(data.toohigh == 1),或者先转成数字再判断if(Number(data.toohigh) === 1)。属性设置方法错误
disabled是DOM的布尔属性,jQuery 1.6及以上版本推荐用prop()方法操作布尔属性,attr()设置的是HTML标签的静态属性,在动态修改表单状态时经常会出现不生效的问题。
正确的禁用写法是:
$("#subbut").prop('disabled', true);
启用写法是:
$("#subbut").prop('disabled', false);
- 逻辑分支错误
你当前的代码里,data.toohigh等于1和等于0的两个分支都执行了禁用按钮的逻辑,如果你需求是等于1禁用、等于0启用,那逻辑本身就写错了,应该修改else分支的代码:
success:function(data){ $("#value10").html(data.price); $("#total").html(data.newtotal); $("#toohigh").html(data.toohigh); if(Number(data.toohigh) === 1) { $("#subbut").prop('disabled', true); } else if(Number(data.toohigh) === 0){ $("#subbut").prop('disabled', false); } }
- 其他排查方向
- 打开浏览器控制台,在判断逻辑前加
console.log(data.toohigh, typeof data.toohigh),确认接口返回的字段值和类型是否符合预期 - 检查页面是否存在多个
id="subbut"的元素,id重复会导致选择器匹配到错误的元素 - 确认请求触发时按钮已经完成渲染,没有被动态替换
内容的提问来源于stack exchange,提问作者Matt Drake
相关产品推荐
相关产品推荐

