Tengo un formulario con "¿Este caso tiene un número de IR?"
En caso afirmativo, muestre los campos. Si no, ocultar y mostrar a los demás.
estoy usando
validate() .old() para mantener los datos después del envío fallido del formulario, también conocido como mensajes de error de validate() . Para la entrada de radio, usé old() como este:
<input class="btn-check" type="radio" name="checkIR" value="haveIR" @if(!old('checkIR')) checked @endif id="haveIR" required> <input class="btn-check" type="radio" name="checkIR" value="noIR" @if(old('checkIR')) checked @endif id="noIR"> para mantener el checked como está después de la validate() , pero tiene errores, cuando verifico "Sí" y actualizo, marca "No" cuando debe ser como "Sí".
En cuanto a mostrar/ocultar, esto es lo que hice:
// Show/Hide fields based on radio button option $(document).ready(function() { $('input[name="checkIR"]').click(function() { var inputValue = $(this).attr("value") var targetField = $("." + inputValue); $(".box").not(targetField).slideUp(); $(targetField).slideDown(); }); });Con ayuda de css:
.box { display: none; } Cómo funciona el código:
Si la radio yes/haveIR está marcada: muestre todos los campos que contengan class="box haveIR"
Problemas tratando de resolver:
old() ?yes visibles incluso después de que falló la validate() ?Dado que las entradas de radio tienen el mismo nombre, en ambos casos su sesión tiene "checkIR" y cuando intente verificarlo con old('checkIR') devolverá verdadero independientemente de su valor. Es por eso que se marca "No".
Por lo tanto, para encontrar el antiguo seleccionado, debe verificar por su valor, no si existe en la sesión o no.
Un código como este debería funcionar para usted;
<input class="btn-check" type="radio" name="checkIR" value="haveIR" @if(old('checkIR') == 'haveIR') checked @endif id="haveIR" required> <input class="btn-check" type="radio" name="checkIR" value="noIR" @if(old('checkIR') == 'noIR') checked @endif id="noIR">O;
Puede utilizar 0 y 1 para los valores. Dado que old('checkIR') devolverá '0' o '1' y PHP interpretará '0' como falso y '1' como verdadero, el comportamiento será como usted desea.
Y por mantener visibles los campos relacionados;
Puede ejecutar algún script cuando el documento esté listo y configurar los campos relacionados visibles por valor de entrada.
$(document).ready(function() { var input = $('input[name="checkIR"]:checked'); if (input) { // if any checked radio when document ready var targetField = $("." + input.val()); $(".box").not(targetField).slideUp(); $(targetField).slideDown(); } });Nota: no ejecutó el script, puede tener errores, pero entiende el punto.