JQuery仅启用值为True

时间:2017-02-02 11:54:41

标签: javascript jquery html ejs

我收到了以下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值而不是其他

3 个答案:

答案 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);
    }
});