jQuery - casilla de verificación habilitar / deshabilitar

234

Tengo un montón de casillas de verificación como esta. Si la casilla de verificación "Verificar" está marcada, todas las otras 3 casillas de verificación deberían estar habilitadas, de lo contrario, deberían estar deshabilitadas. ¿Cómo puedo hacer esto usando 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
fuente

Respuestas:

413

Cambia ligeramente tu marcado:

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

Puede hacerlo utilizando selectores de atributos sin introducir el ID y las clases, pero es más lento y (en mi opinión) más difícil de leer.

cletus
fuente
3
Para la parte de discapacidad, pruebe esta url: jquery-howto.blogspot.com/2008/12/…
Walt Stoneburner
3
Esto no está directamente relacionado con la pregunta, pero en IE el evento de cambio no se activará hasta que la casilla de verificación pierda el foco. Por lo general, llamo $(this).changeal evento de clic de la primera casilla de verificación.
mcrumley
10
puedes usar en .prop()lugar de .attr().
Reza Owliaei
55
Tuve problemas con .prop (), funcionó en el conjunto inicial, pero si cambiaba de un lado a otro, la segunda vez no "deshabilitaba" la casilla de verificación. Me quedé con attr ().
ProVega
100

Esta es la solución más actualizada.

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

Aquí están los detalles de uso para .attr()y.prop() .

jQuery 1.6+

Use la nueva .prop()función:

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

jQuery 1.5 y abajo

La .prop()función no está disponible, por lo que debe usar.attr() .

Para deshabilitar la casilla de verificación (al establecer el valor del atributo deshabilitado), haga

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

y para habilitar (eliminando el atributo por completo) hacer

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

Cualquier versión de jQuery

Si está trabajando con un solo elemento, siempre será más rápido de usar DOMElement.disabled = true. El beneficio de usar las funciones .prop()y .attr()es que funcionarán en todos los elementos coincidentes.

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

ref: ¿ Configuración "marcada" para una casilla de verificación con jQuery?

Roydukkey
fuente
2
Para aquellos que usan un asp: CheckBox como yo, se presenta en el navegador como una entrada dentro de un lapso. Entonces, en mi caso, tuve que acceder con jQuery como $ ('. CheckboxClassName input'). Prop ('disabled', false) ... e intentar cambiar 'enabled' tampoco funcionó para mí :) Gracias por esta respuesta!
considera el
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);
});

Con funcionalidad adicional para garantizar que la casilla de verificación marcar todos se marca / desmarca si todas las casillas de verificación individuales están marcadas:

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

Aquí hay otra muestra usando JQuery 1.10.2

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