Кнопка JQuery enable only со значением True

Я получил следующий 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 ответа

Решение

Проблема в том, что $('.enb') выберет все кнопки. Вместо этого вы должны использовать this Ключевое слово в each() вызов для ссылки на текущую кнопку в итерации. Попробуй это:

$(".btnEnable").each(function() {
    var isEnable = $(this).val();
    $(this).prop("disabled", isEnable == 'FALSE');
});

Обратите внимание на использование prop() здесь, как вы можете предоставить ему логическое значение, которое будет работать для любого состояния isEnableЭто означает, что вы можете удалить if состояние.

Вы почти на месте - вы получили значение текущей кнопки, используя

$(this).val();

Важным фактором является "это". Он относится к элементу, который является предметом текущей итерации цикла.each.

Таким образом, чтобы изменить свойство disabled только текущей кнопки, применяется тот же принцип:

$(".enb").attr("disabled", true);

должен стать

$(this).attr("disabled", true);

Используя селектор.enb, вы, как вы заметили, отключите все кнопки, имеющие класс "enb".

Чтобы уточнить это далее, документация jQuery предлагает вам использовать .prop() скорее, чем .attr() установить свойства такого типа (при условии, что ваша версия jQuery>=1.6)

$(this).prop("disabled", true);

Вы можете заменить .enb с $(this)

.enb выберет все элементы, соответствующие. $(this) выберет только текущий в цикле.

$(".btnEnable").each(function() {
    var isEnable = $(this).val();
    if (isEnable == 'FALSE') {
        $(this).attr("disabled", "disabled");
        //$(this).prop("disabled", true);
    }
});
Другие вопросы по тегам