jQuery - case à cocher activer / désactiver

235

J'ai un tas de cases à cocher comme celle-ci. Si la case "Check Me" est cochée, les 3 autres cases à cocher doivent être activées, sinon elles doivent être désactivées. Comment puis-je faire cela en utilisant 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
la source

Réponses:

414

Modifiez légèrement votre balisage:

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

Vous pouvez le faire en utilisant des sélecteurs d'attributs sans introduire l'ID et les classes, mais c'est plus lent et (à mon humble avis) plus difficile à lire.

cletus
la source
3
Pour la partie désactivation, essayez cette URL: jquery-howto.blogspot.com/2008/12/…
Walt Stoneburner
3
Ce n'est pas directement lié à la question, mais dans IE, l'événement de modification ne se déclenchera pas tant que la case à cocher ne perdra pas le focus. J'appelle généralement $(this).changesur l'événement de clic de la première case à cocher.
mcrumley
10
vous pouvez utiliser à la .prop()place de .attr().
Reza Owliaei
5
J'ai eu des problèmes avec .prop (), cela fonctionnait sur le jeu initial, mais si je basculais d'avant en arrière, la deuxième fois, il ne parvenait pas à "désactiver" la case à cocher. Je suis resté avec attr ().
ProVega
100

Il s'agit de la solution la plus récente.

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

Voici les détails d'utilisation de .attr()et .prop().

jQuery 1.6+

Utilisez la nouvelle .prop()fonction:

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

jQuery 1.5 et inférieur

La .prop()fonction n'est pas disponible, vous devez donc l'utiliser .attr().

Pour désactiver la case à cocher (en définissant la valeur de l'attribut désactivé),

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

et pour activer (en supprimant l'attribut entièrement) faire

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

Toute version de jQuery

Si vous travaillez avec un seul élément, il sera toujours plus rapide à utiliser DOMElement.disabled = true. L'avantage d'utiliser les fonctions .prop()et .attr()est qu'elles fonctionneront sur tous les éléments correspondants.

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

ref: Définir "coché" pour une case à cocher avec jQuery?

roydukkey
la source
2
Pour ceux qui utilisent un asp: CheckBox comme moi, il s'affiche dans le navigateur comme une entrée dans un intervalle. Donc, dans mon cas, j'ai dû y accéder avec jQuery en tant que $ ('. CheckboxClassName input'). Prop ('désactivé', faux) ... et essayer de changer 'activé' n'a pas fonctionné pour moi non plus :) Merci pour cette réponse!
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);
});

Avec des fonctionnalités supplémentaires pour garantir que la case à cocher Tout cocher est cochée / décochée si toutes les cases à cocher individuelles sont cochées:

$(".chkGroup").click(function() {
  $("#chkAll")[0].checked = $(".chkGroup:checked").length == $(".chkGroup").length;
});
zincorp
la source
1

Voici un autre exemple utilisant JQuery 1.10.2

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