jQuery - pole wyboru włącz / wyłącz

234

Mam kilka takich pól wyboru. Jeśli pole wyboru „Check Me” jest zaznaczone, wszystkie pozostałe 3 pola wyboru powinny być włączone, w przeciwnym razie powinny być wyłączone. Jak mogę to zrobić za pomocą 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>
Jake
źródło

Odpowiedzi:

413

Zmień nieznacznie znaczniki:

$(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>

Możesz to zrobić za pomocą selektorów atrybutów bez wprowadzania identyfikatora i klas, ale jest on wolniejszy i (imho) trudniejszy do odczytania.

Cletus
źródło
3
W części dotyczącej wyłączania spróbuj tego adresu
Walt Stoneburner
3
Nie jest to bezpośrednio związane z pytaniem, ale w IE zdarzenie zmiany nie zostanie uruchomione, dopóki pole wyboru nie straci uwagi. Zwykle wywołuję $(this).changezdarzenie kliknięcia pierwszego pola wyboru.
mcrumley
10
możesz użyć .prop()zamiast .attr().
Reza Owliaei
5
Miałem problemy z .prop (), działał on na początkowym zestawie, ale jeśli przełączałem się tam iz powrotem, to po raz drugi nie udało się „wyłączyć” pola wyboru. Utknąłem z attr ().
ProVega
100

To jest najbardziej aktualne rozwiązanie.

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

Oto szczegóły użycia dla .attr()i .prop().

jQuery 1.6+

Użyj nowej .prop()funkcji:

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

jQuery 1.5 i poniżej

.prop()Funkcja nie jest dostępna, więc trzeba użyć .attr().

Aby wyłączyć pole wyboru (ustawiając wartość atrybutu disabled), wykonaj

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

i do włączenia (poprzez całkowite usunięcie atrybutu) zrobić

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

Dowolna wersja jQuery

Jeśli pracujesz tylko z jednym elementem, zawsze będzie on najszybszy w użyciu DOMElement.disabled = true. Zaletą korzystania z funkcji .prop()i .attr()jest to, że będą działać na wszystkich dopasowanych elementach.

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

ref: Ustawienie „zaznaczone” dla pola wyboru w jQuery?

roydukkey
źródło
2
Dla tych, którzy używają asp: CheckBox jak ja, renderuje się w przeglądarce jako dane wejściowe w ramach zakresu. Więc w moim przypadku musiałem uzyskać do niego dostęp za pomocą jQuery jako $ ('. CheckboxClassName input'). Prop ('disabled', false) ... i próba zmiany 'enable' też nie działała dla mnie :) Dzięki dla tej odpowiedzi!
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);
});

Z dodatkową funkcjonalnością zapewniającą zaznaczenie / odznaczenie wszystkich pól wyboru, jeśli wszystkie poszczególne pola wyboru są zaznaczone:

$(".chkGroup").click(function() {
  $("#chkAll")[0].checked = $(".chkGroup:checked").length == $(".chkGroup").length;
});
zincorp
źródło
1

Oto kolejna próbka wykorzystująca JQuery 1.10.2

$(".chkcc9").on('click', function() {
            $(this)
            .parents('table')
            .find('.group1') 
            .prop('checked', $(this).is(':checked')); 
});
Paolo Guevara
źródło
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
źródło
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>

Guvanch Hojamov
źródło