Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] asignar required a inputs cuando se seleccione un checkbox

Estas en el tema de asignar required a inputs cuando se seleccione un checkbox en el foro de Javascript en Foros del Web. hola a todos. bueno, en mi form tengo una tabla con 7 columnas, en las cuales, se ubican en la primera columna unos checkbox de ...
  #1 (permalink)  
Antiguo 26/01/2016, 09:41
 
Fecha de Ingreso: septiembre-2015
Mensajes: 58
Antigüedad: 8 años, 7 meses
Puntos: 2
asignar required a inputs cuando se seleccione un checkbox

hola a todos.

bueno, en mi form tengo una tabla con 7 columnas, en las cuales, se ubican en la primera columna unos checkbox de tipo array igual que en las demas, se ubican inputs de tipo text, lo que busco y no tengo ni idea de como hacer ya que no tengo muchos conocimientos en este tema, es que al seleccionar un checkbox, se les asigne la propiedad required a las cajas de texto de esa fila. alguien podría darme una idea de como hacerlo?

tengo lo siguiente pero en la consola me indica error.

declaro mis checkbox asi;
la variable $i es un contador.
Código PHP:
Ver original
  1. <input type='checkbox' name='pedir[]' id="<? echo $i;?>" onclick="required(<? echo $i;?>);" value='si'>

la función que intento usar es la siguiente:

Código Javascript:
Ver original
  1. function required(i){
  2.             $("#und"+i).attr('required', true);  
  3.         }

y el input al cual quiero asignar la propiedad required los declaro así;

Código PHP:
Ver original
  1. <input type="text" name="und[]" id='und<? echo $i;?>' class="caja" style="width:70%;" value="<? if(isset($und)){ echo $und[$i]; } ?>">
No sé cual pueda ser el error, como os dije, no sé mucho sobre este tema :(.
podrían ayudarme?

muchas gracias de ante mano a todos.

Última edición por jmg1189; 26/01/2016 a las 10:54
  #2 (permalink)  
Antiguo 26/01/2016, 13:02
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: asignar required a inputs cuando se seleccione un checkbox

Cuando se marca o desmarca un checkbox, se produce el evento change. Una manera práctica de hacer lo que buscas consiste en delegar dicho evento a la tabla que contiene a todos los campos; luego, mediante la propiedad event.target, tomarías al elemento en el que se produjo el evento, que en este caso sería cada checkbox y como veo que su name es distinto a los de los campos de texto, solo tendrías que verificar que el nombre del elemento contenga la palabra "pedir". Cuando verifiques esto, solo te queda saber si el checkbox está marcado o desmarcado. Si está marcado, tomas a elemento padre del checkbox, que sería la celda, y de esta a su elemento padre, que sería la fila. En la fila, tomarías a todos los elementos cuyo nombre empiece por "und", recorrerías al conjunto resultante y les asignarías el atributo en cuestión. Si el checkbox está desmarcado, se los quitarías.

Código Javascript:
Ver original
  1. document.querySelector("#id de la tabla").addEventListener("change", function(event){
  2.     if (event.target.name.indexOf("pedir") > -1){
  3.         if (event.target.checked){
  4.             [].forEach.call(event.target.parentNode.parentNode.querySelectorAll("[name^=und]"), function(input){
  5.                 input.required = true;
  6.             });
  7.         }
  8.         else{
  9.             [].forEach.call(event.target.parentNode.parentNode.querySelectorAll("[name^=und]"), function(input){
  10.                 input.required = false;
  11.             });
  12.         }
  13.     }
  14. }, false);

Para futuras consultas:
Un saludo
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 26/01/2016, 13:12
 
Fecha de Ingreso: septiembre-2015
Mensajes: 58
Antigüedad: 8 años, 7 meses
Puntos: 2
Respuesta: asignar required a inputs cuando se seleccione un checkbox

Cita:
Iniciado por Alexis88 Ver Mensaje

Un saludo
hola alexis88, muchas gracias por tu pronta respuesta.
Intente de la siguiente forma, y me ha funcionado, te muestro y me dices que opinas, ya que supongo que pues puede haber una forma no tan poco práctica o no sé como llamarle jeje. mira:

el checkbox lo declaro así;

Código PHP:
Ver original
  1. <input type='checkbox' name='pedir<? echo $i?>' id="pedir<? echo $i;?>" onclick="asignar(<? echo $i;?>);" value='si'>


y la función que usé fue así;

Código Javascript:
Ver original
  1. function asignar(i){//funcion que asigna el valor required a las cajas de la fila donde se pulse el checkbox para solicitar un elemento.
  2.             var x = i;
  3.             var elemento=document.getElementById("pedir"+x);
  4.             if(elemento.checked){
  5.                 document.getElementById("und"+x).required=true; document.getElementById("cant"+x).required=true; document.getElementById("marca"+x).required=true;
  6.                 document.getElementById("ref"+x).required=true; document.getElementById("descripcion"+x).required=true; document.getElementById("proyecto"+x).required=true;
  7.                 document.getElementById("und"+x).disabled=false; document.getElementById("cant"+x).disabled=false; document.getElementById("marca"+x).disabled=false;
  8.                 document.getElementById("ref"+x).disabled=false; document.getElementById("descripcion"+x).disabled=false; document.getElementById("proyecto"+x).disabled=false;
  9.                 document.getElementById("comenta"+x).disabled=false;
  10.             }else{
  11.                 document.getElementById("und"+x).required=false; document.getElementById("cant"+x).required=false; document.getElementById("marca"+x).required=false;
  12.                 document.getElementById("ref"+x).required=false; document.getElementById("descripcion"+x).required=false; document.getElementById("proyecto"+x).required=false;
  13.                 document.getElementById("und"+x).disabled=true; document.getElementById("cant"+x).disabled=true; document.getElementById("marca"+x).disabled=true;
  14.                 document.getElementById("ref"+x).disabled=true; document.getElementById("descripcion"+x).disabled=true; document.getElementById("proyecto"+x).disabled=true;
  15.                 document.getElementById("comenta"+x).disabled=true;
  16.             }
  17.         }

Admito que tal vez no es la mejor manera de hacerlo, puesto que como te indico, no es mucho lo que sé sobre javascript. Pero ha funcionado jeje.

muchas gracias por tu ayuda.
  #4 (permalink)  
Antiguo 26/01/2016, 14:16
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: asignar required a inputs cuando se seleccione un checkbox

Es una forma válida. Como no lo indicaste en el código original, supuse que los nombres del resto de campos de texto empezaban por la misma palabra, pero como veo que no es así y si quieres probar con la forma que te propuse, puedes hacerlo así:
Código Javascript:
Ver original
  1. document.addEvenListener("DOMContentLoaded", function(){
  2.     document.querySelector("#id de la tabla").addEventListener("change", function(event){
  3.         if (event.target.name.indexOf("pedir") > -1){
  4.             if (event.target.checked){
  5.                 [].forEach.call(event.target.parentNode.parentNode.querySelectorAll("input"), function(input){
  6.                     input.required = true;
  7.                 });
  8.             }
  9.             else{
  10.                 [].forEach.call(event.target.parentNode.parentNode.querySelectorAll("input"), function(input){
  11.                     input.required = false;
  12.                 });
  13.             }
  14.         }
  15.     }, false);
  16. }, false);

La ventaja de hacerlo de esta manera es que puedes tener N campos de texto y todos se verán afectados; además, así mantienes limpio tu código puesto que el código JavaScript ya no estará combinado con el HTML y si decidieras hacer algún cambio más adelante, solo tendrías que modificar el código del archivo JavaScript.

Un saludo
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 27/01/2016, 09:51
 
Fecha de Ingreso: septiembre-2015
Mensajes: 58
Antigüedad: 8 años, 7 meses
Puntos: 2
Respuesta: asignar required a inputs cuando se seleccione un checkbox

vale, muchas gracias alexis, se ve que sabes mucho del tema y agradezco enormemente tu ayuda. Probaré de la forma que me dices a ver que resultado tengo.

Mil gracias.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:22.