Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

217
Visualizações
Si todas las casillas de verificación están marcadas, habilite el botón Enviar

Tengo un formulario simple con algunas casillas de verificación y estoy tratando de obtenerlo para que el botón Enviar esté habilitado cuando todas las casillas de verificación estén marcadas.

He estado jugando con algunas de las respuestas de aquí: habilite el botón Enviar solo cuando todos los campos estén llenos

Pero parece que no habilita el botón de enviar o lo habilita justo después de marcar uno. Esto es lo que tengo:

 $(document).on("change keyup", ".required", function(e) { let Disabled = true; $(".required").each(function() { let value = this.value; if (value && value.trim() != "") { Disabled = false; } else { Disabled = true; return false; } }); if (Disabled) { $(".toggle-disabled").prop("disabled", true); } else { $(".toggle-disabled").prop("disabled", false); } });
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <form action="#"> <p> <label> <input type="checkbox" class="filled-in box required" name="item" /> <span>Filled in</span> </label> </p> <p> <label> <input type="checkbox" class="filled-in box required" name="item" /> <span>Filled in</span> </label> </p> <p> <label> <input type="checkbox" class="filled-in box required" name="item" /> <span>Filled in</span> </label> </p> <p> <button type="button" class="toggle-disabled" disabled>Submit</button> </p> </form>

Es extraño porque funciona, pero tan pronto como marco una casilla, el botón Enviar está habilitado. Parece que tengo todas las piezas allí, pero no estoy seguro si es algo dentro de la clave de change keyup o algo más.

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

  1. Solo necesita un EventListener para verificar los cambios realizados dentro de la entrada (casillas de verificación). No necesita escuchar todos los cambios o cambios de keyups en todo el documento. Así que solo use $('form input[type="checkbox"]').change(function(){ ... } que ahorrará recursos.
  2. Debe verificar cuántas casillas de verificación no se han marcado con $('form input[type="checkbox"]:not(:checked)').length . Esto le dará el número exacto de casillas de verificación que están actualmente sin marcar.
  3. Ahora puede usar una if/else-statement para ver si ese recuento es mayor que 0 (lo que significa que al menos 1 casilla de verificación aún está sin marcar. En mi ejemplo, reemplacé la if/else-statement con un conditional ternary operator para guardar un Pocas lineas:

 $('form input[type="checkbox"]').change(function(){ var allChecked = !!$('form input[type="checkbox"]:not(:checked)').length; $('.toggle-disabled').prop('disabled', allChecked); })
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <form action="#"> <p> <label> <input type="checkbox" class="filled-in box required" name="item" /> <span>Filled in</span> </label> </p> <p> <label> <input type="checkbox" class="filled-in box required" name="item" /> <span>Filled in</span> </label> </p> <p> <label> <input type="checkbox" class="filled-in box required" name="item" /> <span>Filled in</span> </label> </p> <p> <button type="button" class="toggle-disabled" disabled>Submit</button> </p> </form>

about 4 years ago · Juan Pablo Isaza Relatório

0

Debe realizar un seguimiento del conteo como lo sugiere @tacoshy, he modificado su código para reflejar los cambios.

 $(document).on("change keyup", ".required", function(e) { let Disabled = $(".required").length; $(".required").each(function() { if(this.checked) Disabled--; }); if (Disabled) { $(".toggle-disabled").prop("disabled", true); } else { $(".toggle-disabled").prop("disabled", false); } });
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <form action="#"> <p> <label> <input type="checkbox" class="filled-in box required" name="item" /> <span>Filled in</span> </label> </p> <p> <label> <input type="checkbox" class="filled-in box required" name="item" /> <span>Filled in</span> </label> </p> <p> <label> <input type="checkbox" class="filled-in box required" name="item" /> <span>Filled in</span> </label> </p> <p> <button type="button" class="toggle-disabled" disabled>Submit</button> </p> </form>

about 4 years ago · Juan Pablo Isaza Relatório

0

Simplemente compare los recuentos marcados y no marcados en cualquier cambio.

  • Dale al formulario una identificación (event.delegateTarget)
  • cuente todas las casillas de verificación (filtro para ese tipo)
  • contar las casillas marcadas
  • comparar y establecer la propiedad basada en eso
  • alcance al formulario para el botón (podría considerar filtrar por input[type="submit"] también
  • gatillo en carga para desactivarlo si no está todo marcado en ese punto

 $("#formid").on("change", ".required", function(event) { let allCheckboxes = $(event.delegateTarget) .find(".required").filter('input[type="checkbox"]'); let checkedCount = allCheckboxes.filter(":checked").length; $(event.delegateTarget).find(".toggle-disabled") .prop("disabled", allCheckboxes.length != checkedCount); }).trigger("change");
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <form id="formid" action="#"> <p> <label> <input type="checkbox" class="filled-in box required" name="item" /> <span>Filled in</span> </label> </p> <p> <label> <input type="checkbox" class="filled-in box required" name="item" /> <span>Filled in</span> </label> </p> <p> <label> <input type="checkbox" class="filled-in box required" name="item" /> <span>Filled in</span> </label> </p> <p> <button type="button" class="toggle-disabled" disabled>Submit</button> </p> </form>

Alternativa

 $("#formid").on("change", ".required", function(event) { let notAllChecked = !!$(event.delegateTarget) .find(".required").filter('input[type="checkbox"]:not(:checked)').length; $(event.delegateTarget).find(".toggle-disabled") .prop("disabled", notAllChecked); }).trigger("change");
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <form id="formid" action="#"> <p> <label> <input type="checkbox" class="filled-in box required" name="item" /> <span>Filled in</span> </label> </p> <p> <label> <input type="checkbox" class="filled-in box required" name="item" /> <span>Filled in</span> </label> </p> <p> <label> <input type="checkbox" class="filled-in box required" name="item" /> <span>Filled in</span> </label> </p> <p> <button type="button" class="toggle-disabled" disabled>Submit</button> </p> </form>

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda