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>

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.


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?


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

1

Aquí hay otra muestra usando 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" />


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>

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.