我收到了以下HTML代码:
<button type="button" class="btn btn-primary jumbotron-td-enable-button enb btnEnable" value="<%= enables[i]%>">
Enable
</button>
通过在json文件上动态提取数据来呈现此按钮,因此我得到以下值value="<%= enables[i] %>
这是我的javascript:
$(".btnEnable").each(function() {
var isEnable = $(this).val();
if (isEnable == 'FALSE') {
$(".enb").attr("disabled", true);
}
});
我的问题是它完成了所有按钮,例如按钮的值是这样的:
FALSE
TRUE
TRUE
FALSE
所以我只想禁用FALSE按钮。我确实尝试使用ID,它做了我想要的但问题是它只获得第一个FALSE值而不是其他
答案 0 :(得分:2)
问题是因为$('.enb')
会选择所有按钮。相反,您应该使用this
调用中的each()
关键字来引用迭代中的当前按钮。试试这个:
$(".btnEnable").each(function() {
var isEnable = $(this).val();
$(this).prop("disabled", isEnable == 'FALSE');
});
注意在这里使用prop()
,因为你可以为它提供一个布尔值,它适用于isEnable
的任一状态,这意味着你可以删除if
条件。
答案 1 :(得分:2)
你几乎就在那里 - 你使用
获得了当前按钮的值$(this).val();
重要的因素是“这个”。它引用的元素是.each循环的当前迭代的主题。
因此,要仅更改当前按钮的禁用属性,同样的原则适用:
$(".enb").attr("disabled", true);
应该成为
$(this).attr("disabled", true);
使用.enb选择器,如您所知,将禁用所有具有“enb”类的按钮。
为了进一步优化它,jQuery文档建议您使用.prop()
而不是.attr()
来设置此类属性(假设您的jQuery版本是&gt; = 1.6)
$(this).prop("disabled", true);
答案 2 :(得分:1)
您可以将.enb
替换为$(this)
.enb
将选择匹配的所有元素。 $(this)
将仅在循环中选择当前的一个。
$(".btnEnable").each(function() {
var isEnable = $(this).val();
if (isEnable == 'FALSE') {
$(this).attr("disabled", "disabled");
//$(this).prop("disabled", true);
}
});