如何用jQuery禁用特定值按钮?现有代码仅部分生效
问题分析与解决方案
问题根源
你的代码只禁用了value为1的按钮,核心原因有两个:
- 遍历方式错误:用
for...in遍历数组pls时,拿到的el是数组的索引(字符串类型的"0"、"1"),不是数组里的目标数值(45、1)。只有value为"1"的按钮刚好和索引"1"匹配,才被禁用;而45对应的索引是"0",没有匹配的按钮,所以未生效。 - 数组结构冗余:
pls是二维数组(每个元素都是子数组,比如[45]),即使拿到数组元素,也需要额外提取子数组内的数值才能匹配按钮的value。 - 类型不统一:
attr("value")返回字符串类型,和数字直接比较可能出现隐式转换问题。
解决方案
下面提供几种简洁高效的修正写法:
方法一:简化数组结构 + 直接定位元素(推荐)
把二维数组改成一维数组,通过属性选择器直接定位目标按钮,无需遍历所有.seat元素:
var pls = [45, 1]; pls.forEach(function(num) { $('.seat[value="' + num + '"]').prop('disabled', true); });
方法二:保留原二维数组结构
如果必须保留二维数组,需要提取子数组内的数值,同时改用正确的数组遍历方式:
var pls = [[45], [1]]; pls.forEach(function(item) { var targetValue = item[0]; // 提取子数组中的目标数值 $('.seat').each(function() { // 统一类型后再比较,避免隐式转换问题 if (parseInt($(this).attr('value'), 10) === targetValue) { $(this).prop('disabled', true); } }); });
方法三:用jQuery的$.each遍历数组
如果习惯用jQuery的遍历方法,也可以这样写:
var pls = [45, 1]; $.each(pls, function(index, num) { $('.seat[value="' + num + '"]').prop('disabled', true); });
内容的提问来源于stack exchange,提问作者Егор
相关产品推荐
相关产品推荐

