JQuery - флажок включить / отключить

235

У меня есть несколько таких флажков. Если флажок «Check Me» установлен, все остальные 3 флажка должны быть включены, иначе они должны быть отключены. Как я могу сделать это с помощью jQuery?

<form name="frmChkForm" id="frmChkForm">
<input type="checkbox" name="chkcc9">Check Me
<input type="checkbox" name="chk9[120]">
<input type="checkbox" name="chk9[140]">
<input type="checkbox" name="chk9[150]">
</form>
Джейк
источник

Ответы:

414

Немного измените разметку:

$(function() {
  enable_cb();
  $("#group1").click(enable_cb);
});

function enable_cb() {
  if (this.checked) {
    $("input.group1").removeAttr("disabled");
  } else {
    $("input.group1").attr("disabled", true);
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form name="frmChkForm" id="frmChkForm">
  <input type="checkbox" name="chkcc9" id="group1">Check Me <br>
  <input type="checkbox" name="chk9[120]" class="group1"><br>
  <input type="checkbox" name="chk9[140]" class="group1"><br>
  <input type="checkbox" name="chk9[150]" class="group1"><br>
</form>

Вы можете сделать это, используя селекторы атрибутов, не вводя ID и классы, но это медленнее и (imho) труднее для чтения.

Клетус
источник
3
Для отключающей части, попробуйте этот URL: jquery-howto.blogspot.com/2008/12/…
Уолт Стоунбернер
3
Это не имеет прямого отношения к вопросу, но в IE событие изменения не будет срабатывать, пока флажок не потеряет фокус. Я обычно вызываю $(this).changeсобытие click первого флажка.
Макрумли
10
Вы можете использовать .prop()вместо .attr().
Реза Owliaei
5
У меня были проблемы с .prop (), он работал на начальном наборе, но если я переключался туда-сюда, во второй раз он не смог «отключить» флажок. Я застрял с attr ().
ProVega
100

Это самое современное решение.

<form name="frmChkForm" id="frmChkForm">
    <input type="checkbox" name="chkcc9" id="group1" />Check Me
    <input type="checkbox" name="chk9[120]" class="group1" />
    <input type="checkbox" name="chk9[140]" class="group1" />
    <input type="checkbox" name="chk9[150]" class="group1" />
</form>

$(function() {
    enable_cb();
    $("#group1").click(enable_cb);
});

function enable_cb() {
    $("input.group1").prop("disabled", !this.checked);
}

Вот подробности использования для .attr()и .prop().

JQuery 1.6+

Используйте новую .prop()функцию:

$("input.group1").prop("disabled", true);
$("input.group1").prop("disabled", false);

JQuery 1,5 и ниже

.prop()Функция не доступна, так что вам нужно использовать .attr().

Чтобы отключить флажок (установив значение атрибута disabled), выполните

$("input.group1").attr('disabled','disabled');

и для включения (полностью удалив атрибут) сделать

$("input.group1").removeAttr('disabled');

Любая версия jQuery

Если вы работаете только с одним элементом, он всегда будет самым быстрым в использовании DOMElement.disabled = true. Выгода для использования .prop()и .attr()функций является то , что они будут работать на все соответствующие элементы.

// Assuming an event handler on a checkbox
if (this.disabled)

ref: Установка "флажок" для флажка с jQuery?

roydukkey
источник
2
Для тех, кто использует asp: CheckBox, как я, он отображает в браузере в качестве входных данных в промежутке. Так что в моем случае мне пришлось обращаться к нему с помощью jQuery как $ ('. CheckboxClassName input'). Prop ('disabled', false) ... и попытка изменить 'enabled' у меня тоже не сработала :) Спасибо за этот ответ!
deebs
10
<form name="frmChkForm" id="frmChkForm">
<input type="checkbox" name="chkcc9" id="chkAll">Check Me
<input type="checkbox" name="chk9[120]" class="chkGroup">
<input type="checkbox" name="chk9[140]" class="chkGroup">
<input type="checkbox" name="chk9[150]" class="chkGroup">
</form>

$("#chkAll").click(function() {
   $(".chkGroup").attr("checked", this.checked);
});

С добавленной функциональностью, чтобы убедиться, что флажок «все флажки» отмечен / снят, если установлены все флажки:

$(".chkGroup").click(function() {
  $("#chkAll")[0].checked = $(".chkGroup:checked").length == $(".chkGroup").length;
});
zincorp
источник
1

Вот еще один пример использования JQuery 1.10.2

$(".chkcc9").on('click', function() {
            $(this)
            .parents('table')
            .find('.group1') 
            .prop('checked', $(this).is(':checked')); 
});
Паоло Гевара
источник
1

$(document).ready(function() {
  $('#InventoryMasterError').click(function(event) { //on click
    if (this.checked) { // check select status
      $('.checkerror').each(function() { //loop through each checkbox
        $('#selecctall').attr('disabled', 'disabled');
      });
    } else {
      $('.checkerror').each(function() { //loop through each checkbox
        $('#selecctall').removeAttr('disabled', 'disabled');
      });
    }
  });

});

$(document).ready(function() {
  $('#selecctall').click(function(event) { //on click
    if (this.checked) { // check select status
      $('.checkbox1').each(function() { //loop through each checkbox
        $('#InventoryMasterError').attr('disabled', 'disabled');
      });

    } else {
      $('.checkbox1').each(function() { //loop through each checkbox
        $('#InventoryMasterError').removeAttr('disabled', 'disabled');
      });
    }
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="checkbox" id="selecctall" name="selecctall" value="All" />
<input type="checkbox" name="data[InventoryMaster][error]" label="" value="error" id="InventoryMasterError" />
<input type="checkbox" name="checkid[]" class="checkbox1" value="1" id="InventoryMasterId" />
<input type="checkbox" name="checkid[]" class="checkbox1" value="2" id="InventoryMasterId" />

princespn
источник
0

$jQuery(function() {
  enable_cb();
  jQuery("#group1").click(enable_cb);
});

function enable_cb() {
  if (this.checked) {
    jQuery("input.group1").removeAttr("disabled");
  } else {
    jQuery("input.group1").attr("disabled", true);
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form name="frmChkForm" id="frmChkForm">
  <input type="checkbox" name="chkcc9" id="group1">Check Me <br>
  <input type="checkbox" name="chk9[120]" class="group1"><br>
  <input type="checkbox" name="chk9[140]" class="group1"><br>
  <input type="checkbox" name="chk9[150]" class="group1"><br>
</form>

Гуванч Ходжамов
источник