Cita:
Iniciado por zyon
hola caricatos, apenas pude probar tu ejemplo, pero no entiendo varias cosas de tu funcion, parece ser que se esta anidando una funcion dentro de otra y n entiendo otra cosa por hay, me la puedes explicar?
Hola:
Acabo de probar el código y tenía un par de fallicos... te paso el código corregido:
Código:
function chequearRadios() {
function chek(f, g) {
var vale = false;
for (var i = 0, grupo = f[g], total = grupo.length; i < total; i ++)
vale = (vale || grupo[i].checked);
return vale;
}
var vale = true;
ar = chequearRadios.arguments;
for (i = 1, formu = ar[0]; grup = ar[i], i < ar.length; i ++)
vale = (vale && chek(formu, grup));
return vale;
}
Lo del anidamiento, no es eso exactamente, es una función interna de otra función, no se usa mucho porque produce el mismo resultado que si estuviera fuera (en el caso "chek"), pero de esa forma puedes definir una función con el mismo nombre fuera, que sería "global", y la interna sólo funcionaría en su ámbito... si sólo va a usarse en esa función, ayudaría a no dispersar mucho el código.
Sobre la función en sí, se trata de poner como parámetros, el primero el propio formulario para referenciarlo internamente, y detrás la lista de campos "radio". El funcionamiento es muy sencillo, se considera en principio que va a pasar la validación, y se actualiza con la operación lógica true por cada grupo de radios que pase la validación (la función check(formulario, grupo)), entonces si un grupo no la pasa la operación será true && false = false, y como resultado, no pasa la validación...
La validación de los grupos es parecida en la teoría, pero cambiando la verificación... empezamos considerando que no hay ninguno checked (v = false), y por cada uno se hace la operación lógica OR de tal forma que si ninguuno está checked seguirá false, pero cuando uno es checked, el grupo valida.
Las operaciones lógicas no son muy difíciles de comprender.
Saludos