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 originaldocument.querySelector("#id de la tabla").addEventListener("change", function(event){
if (event.target.name.indexOf("pedir") > -1){
if (event.target.checked){
[].forEach.call(event.target.parentNode.parentNode.querySelectorAll("[name^=und]"), function(input){
input.required = true;
});
}
else{
[].forEach.call(event.target.parentNode.parentNode.querySelectorAll("[name^=und]"), function(input){
input.required = false;
});
}
}
}, false);
Para futuras consultas:
Un saludo