Foros del Web » Programando para Internet » Javascript »

Checkbox por grupos en tabla dinámica

Estas en el tema de Checkbox por grupos en tabla dinámica en el foro de Javascript en Foros del Web. Se trata de desarrollar un script para individualizar la gestión de los usuarios de una empresa grande a partir de una BBDD con las siguientes ...
  #1 (permalink)  
Antiguo 08/06/2012, 03:02
 
Fecha de Ingreso: noviembre-2003
Mensajes: 78
Antigüedad: 20 años, 5 meses
Puntos: 0
Checkbox por grupos en tabla dinámica

Se trata de desarrollar un script para individualizar la gestión de los usuarios de una empresa grande a partir de una BBDD con las siguientes tablas:
•usuarios
•modulos (funciones para cada division y/o proyecto: Documentos, calidad, CRM, ...etc.)
•divisiones (diferentes unidades de negocio de la empresa)
•proyectos (proyectos de cada división)
La intención es incluir en un campo [permisos] de la tabla usuarios un array que contiene las duplas [$modulo.$iddivision] y [$modulo.$idproyecto] que se seleccionen mediante checkbox para tener una matriz seleccionable para cada usuario.
El script sería algo parecido a esto:
<?php
echo "<form method=\"post\" name=\"peruid\">";
select uid from usuarios
while(list($uid)) {
select modulo from modulos
while(list($modulo)) {//LISTA HORIZONTAL(cabecera de la matriz)
echo "<input name=\"allbox\" onclick=\"CheckAll();\" type=\"checkbox\" value=\""._CHECKALL."\" >
select iddivision from divisiones]
while(list($iddivision)) {//LISTA VERTICAL(izquierda de la matriz)
<input type=\"checkbox\" name=\"array_permiso[]\" value=\"$modulo$iddivision\" >
}
select idproyecto from proyectos
while(list($idproyecto)) {//LISTA VERTICAL(izquierda de la matriz)
echo "<input type=\"checkbox\" name=\"array_permiso[]\" value=\"$modulo$idproyecto\" >";
}
}
}
echo "<input type=\"submit\" name=\"op\" value=\"GUARDAR\">";
/////////////////////////////////////////
echo "<script type=\"text/javascript\">\n\n
<!--\n\n
function CheckAll() {
for (var i=0;i<document.peruid['array_permiso[]'].length;i++)
document.peruid['array_permiso[]'][i].checked = document.peruid.allbox.checked;
}
function CheckCheckAll() {\n
var TotalBoxes = 0;\n
var TotalOn = 0;\n
for (var i=0;i<document.peruid.elements.length;i++) {\n
var e = document.peruid.elements[i];\n
if ((e.name != 'allbox') && (e.type=='checkbox')) {\n
TotalBoxes++;\n
if (e.checked) {\n
TotalOn++;\n
}\n
}\n
}\n
if (TotalBoxes==TotalOn) {\n
document.peruid.allbox.checked=true;\n
} else {\n
document.peruid.allbox.checked=false;\n
}\n
}\n\n
-->\n
</script>\n\n";
////////////////////////////
echo "</form>";
if ($op=="GUARDAR"){
sql_query("update usuarios set permisos='$array_permiso' where uid='$uid'
}
?>
//////////////////////////////////////////////////////////////////////////
Al final por cada usuario tendria una matriz:

USUARIO 1 MOD1 MOD2 MOD3 ....................

DIVISION1 X X X
DIVISION2 X X X
DIVISIONn X X X
PROYECTO1 X X X
PROYECTO2 X X X
PROYECTOn X X X

USUARIO 2

USUARIO n
////////////////////////////////////////////////////////////////////////////////////////////////
Lo único que me queda solucionar es identificar el $array_permiso para cada usuario no sólo para guardarlo sino para poder aplicar el CheckAll para cada módulo pues con el script que tengo cualquier CheckAll me activa permiso para todos los usuarios y todos los modulos .

Gracias por tu atención
  #2 (permalink)  
Antiguo 08/06/2012, 10:04
Avatar de diamari  
Fecha de Ingreso: marzo-2012
Mensajes: 95
Antigüedad: 12 años
Puntos: 30
Respuesta: Checkbox por grupos en tabla dinámica

No visualizo que quieres hacer, ni el problema y el código no me ayuda mucho ya que no lo puedo ejecutar. Pero vamos a intentar.

De lo visto esta creado dinamicamente una tabla de permisos para el usuario escogido donde quieres poder seleccionar y quitar permisos a este e incluso aplicar un select all pero solo para ese usuario.

Según explicas el problema es que si aplicas el select all en vez de darle permiso total a ese usuario en particular, lo aplica a todos. Si es así, tu problema no tiene que ver con javascript ya que este solo seleciona todos los checkbox y si lo esta haciendo.

El problema esta o en tu código de php o tu banco de datos.
  #3 (permalink)  
Antiguo 08/06/2012, 13:15
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: Checkbox por grupos en tabla dinámica

@caitoss

Este es el foro de javascript, si bien es cierto que an alguna situación muy puntual, la inclusión de un código php puede facilitar la comprensión, este no es el caso
Deberías proporcionar el html generado, y de la resultante, indicarnos que es lo que querés hacer y que es lo que no te funciona

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #4 (permalink)  
Antiguo 08/06/2012, 17:21
 
Fecha de Ingreso: noviembre-2003
Mensajes: 78
Antigüedad: 20 años, 5 meses
Puntos: 0
Respuesta: Checkbox por grupos en tabla dinámica

Cita:
Iniciado por diamari Ver Mensaje
No visualizo que quieres hacer, ni el problema y el código no me ayuda mucho ya que no lo puedo ejecutar. Pero vamos a intentar.
A continuación indico, de manera simple, en código htlm, el resultado que pretendo ontener teniendo el cuenta que la tabla es dinámica por lo que los módulos y las divisiones o proyectos son variables que obtengo de sus respectivas bases de datos.
Lo que me interesa es poder hacer funcionar los CheckAll de cada módulo ademas de dejar operativo el CheckAll principal que selecciona todo.
El script que presento no funciona ningún CheckAll pero si quitas los CheckAll de los módulos (marcado en color) funciona el principal lo que quiere decir que es un fallo de identificación del array en la función CheckAll() y esto es lo que debo conseguir.
Muchas gracias por tu atención

<html>
<form method="post" name="peruid">
<table border="1" bordercolor ="e5cd78" width="80%" cellpadding="0" cellspacing="0">
<tr>
<td width="20%">TODOS<br><input name="allbox" onclick="CheckAll();" type="checkbox" value=""._CHECKALL.""></td>
<td width="20%" colspan="4" align="center">PERMISOS DE GESTION A USUARIO XXXXX</td>
</tr>
<!--------------------
<tr>
<td width="20%">DIVISIONES O PROYECTOS($bd)<br></td>
<td width="20%" align="center">Module($modid1)<br>DOC<br><input name="allbox" onclick="CheckAll();" type="checkbox" value=""._CHECKALL.""></td>
<td width="20%" align="center">Module($modid2)<br>GCMA<br><input name="allbox" onclick="CheckAll();" type="checkbox" value=""._CHECKALL."" ></td>
<td width="20%" align="center">Module($modid3)<br>PROY<br><input name="allbox" onclick="CheckAll();" type="checkbox" value=""._CHECKALL."" ></td>
<td width="20%" align="center">Module($modid4)<br>SCRM<br><input name="allbox" onclick="CheckAll();" type="checkbox" value=""._CHECKALL."" ></td>
</tr>
-------------------------->
<tr>
<td width="20%">$bd1 PROYECTO1</td>
<td width="20%" align="center"><input type="checkbox" name="a_permiso[]" value="$modid1$bd1"></td>
<td width="20%" align="center"><input type="checkbox" name="a_permiso[]" value="$modid1$bd2"></td>
<td width="20%" align="center"><input type="checkbox" name="a_permiso[]" value="$modid1$bd3"></td>
<td width="20%" align="center"><input type="checkbox" name="a_permiso[]" value="$modid1$bd4"></td>
</tr>
<tr>
<td width="20%">$bd2 PROYECTO 2</td>
<td width="20%" align="center"><input type="checkbox" name="a_permiso[]" value="$modid2$bd1"></td>
<td width="20%" align="center"><input type="checkbox" name="a_permiso[]" value="$modid2$bd2"></td>
<td width="20%" align="center"><input type="checkbox" name="a_permiso[]" value="$modid2$bd3"></td>
<td width="20%" align="center"><input type="checkbox" name="a_permiso[]" value="$modid2$bd4"></td>
</tr>
<tr>
<td width="20%">$bd3 DIVISION 3</td>
<td width="20%" align="center"><input type="checkbox" name="a_permiso[]" value="$modid3$bd1"></td>
<td width="20%" align="center"><input type="checkbox" name="a_permiso[]" value="$modid3$bd1"></td>
<td width="20%" align="center"><input type="checkbox" name="a_permiso[]" value="$modid3$bd3"></td>
<td width="20%" align="center"><input type="checkbox" name="a_permiso[]" value="$modid3$bd4"></td>
</tr>
<tr>
<td width="20%">$bd4 DIVISION 4</td>
<td width="20%" align="center"><input type="checkbox" name="a_permiso[]" value="$modid4$bd1"></td>
<td width="20%" align="center"><input type="checkbox" name="a_permiso[]" value="$modid4$bd2"></td>
<td width="20%" align="center"><input type="checkbox" name="a_permiso[]" value="$modid4$bd3"></td>
<td width="20%" align="center"><input type="checkbox" name="a_permiso[]" value="$modid4$bd4"></td>
</tr>
</table>
</html>
</form>



<?php
echo "<script type='text/javascript'>\n\n
<!--\n\n
function CheckAll() {
for (var i=0;i<document.peruid['a_permiso[]'].length;i++)
document.peruid['a_permiso[]'][i].checked = document.peruid.allbox.checked;
}
function CheckCheckAll() {\n
var TotalBoxes = 0;\n
var TotalOn = 0;\n
for (var i=0;i<document.peruid.elements.length;i++) {\n
var e = document.peruid.elements[i];\n
if ((e.name != 'allbox') && (e.type=='checkbox')) {\n
TotalBoxes++;\n
if (e.checked) {\n
TotalOn++;\n
}\n
}\n
}\n
if (TotalBoxes==TotalOn) {\n
document.peruid.allbox.checked=true;\n
} else {\n
document.peruid.allbox.checked=false;\n
}\n
}\n\n
-->\n
</script>";


?>
  #5 (permalink)  
Antiguo 08/06/2012, 17:35
 
Fecha de Ingreso: noviembre-2003
Mensajes: 78
Antigüedad: 20 años, 5 meses
Puntos: 0
Respuesta: Checkbox por grupos en tabla dinámica

Cita:
Iniciado por emprear Ver Mensaje
Este es el foro de javascript, si bien es cierto que an alguna situación muy puntual, la inclusión de un código php puede facilitar la comprensión, este no es el caso
Hola emprear, yo se que es el foro de Javascript y no acabo de entender tu "lacónico" comentario sobre la dicotomía entre javascript y php porque conozco muy pocos sistemas de empresa en los que no esten hermanados ambos lenguajes.
En todo caso, ya he expuesto mi problema en mi anterior respuesta en este mismo hilo por si me quieres prestar tu ayuda.
Gracas por tu atención
  #6 (permalink)  
Antiguo 08/06/2012, 19:35
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: Checkbox por grupos en tabla dinámica

@caitoss
Es muy simple, como yo no puedo saber que genera esto
Código PHP:
Ver original
  1. echo "<form method=\"post\" name=\"peruid\">";
  2.  select uid from usuarios
  3.  while(list($uid)) {
  4. select modulo from modulos
  5.  while(list($modulo)) {//LISTA HORIZONTAL(cabecera de la matriz)
  6.  echo "<input name=\"allbox\" onclick=\"CheckAll();\" type=\"checkbox\" value=\""._CHECKALL."\" >
  7.  
  8. select iddivision from divisiones]
  9. while(list($iddivision)) {//LISTA VERTICAL(izquierda de la matriz)
  10. <input type=\"checkbox\" name=\"array_permiso[]\" value=\"$modulo$iddivision\" >
  11. }
  12. select idproyecto from proyectos
  13. while(list($idproyecto)) {//LISTA VERTICAL(izquierda de la matriz)
  14. echo "<input type=\"checkbox\" name=\"array_permiso[]\" value=\"$modulo$idproyecto\" >";
  15.  }
  16. }}

Mal puedo decirte como debe actuar javascript sobre un html que desconozco, y que conste que mi respuesta fue previa a tu 2º post.

Si querés un ejemplo de como chequear multiples checkboxes
aqui tenes un ejemplo
http://www.forosdelweb.com/f13/valid...0/#post4206595

Ese ejemplo identifica el grupo de checkboxes por su name, al parecer en tu caso es siempre el mismo, asi que tendrías que diferenciarlos de otra manera, a primera vista una solución sería asignar a tus checkboxes una clase específica segun su grupo e identificarlos según su className, propiedad que podrías pasar como el parámetro a la función
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #7 (permalink)  
Antiguo 09/06/2012, 06:54
 
Fecha de Ingreso: noviembre-2003
Mensajes: 78
Antigüedad: 20 años, 5 meses
Puntos: 0
Respuesta: Checkbox por grupos en tabla dinámica

Hola emprear...
En primer lugar disculpame de mi comentario anterior pues eran altas horas de la noche y después de estar peleando con este asunto durante horas ourre lo que ocurre.
Supongo que ya te habrás dado cuenta que el form methode post es para manejar posteriormente el array que obtengo y que los select y los while es para obtener las variables que identifican los proyectos y los módulos.
Esta mañana he seguido con el tema (es importante para la actualización de nuestra intranet de empresa) y despues de analizar el enlace que me enviaste y uno más que encontré tuyo también del año 2005 he conseguido dar un buen paso aunque me faltan algunos detalles.

Este es mi script de prueba:
/////////////////////////////////////////
<html>
<form method="post" name="peruid">
<table border="1" bordercolor ="e5cd78" width="80%" cellpadding="0" cellspacing="0">
<tr>
<td width="20%">DIVISIONES O PROYECTOS($bd)<br></td>
<td width="20%" align="center">Module($modid1)<br>DOC<input name="allbox" onclick="DOC(this);" type="checkbox" value=""._CHECKALL.""></td>
<td width="20%" align="center">Module($modid2)<br>GCMA<input name="allbox" onclick="GCMA(this);" type="checkbox" value=""._CHECKALL.""></td>
</tr>

<tr>
<td width="20%">$bd1 PROYECTO1</td>
<td width="20%" align="center"><input type="checkbox" id="aaa" name="a_permiso[]" value="$modid1$bd1"></td>
<td width="20%" align="center"><input type="checkbox" id="bbb" name="a_permiso[]" value="$modid1$bd2"></td>
</tr>
<tr>
<td width="20%">$bd2 PROYECTO 2</td>
<td width="20%" align="center"><input type="checkbox" id="aaa" name="a_permiso[]" value="$modid2$bd1"></td>
<td width="20%" align="center"><input type="checkbox" id="bbb" name="a_permiso[]" value="$modid2$bd2"></td>
</tr>
</table>
</form>
</html>


<?php
echo "<script type='text/javascript'>\n\n
<!--\n\n
function DOC(aa) {
for(i=0;ele=aa.form.elements[i];i++)
if(ele.id.indexOf('aaa') != -1)
ele.checked=aa.checked;
}

function GCMA(bb) {
for(i=0;ele=bb.form.elements[i];i++)
if(ele.id.indexOf('bbb') != -1)
ele.checked=bb.checked;
}


function CheckCheckAll() {\n
var TotalBoxes = 0;\n
var TotalOn = 0;\n
for (var i=0;i<document.peruid.elements.length;i++) {\n
var e = document.peruid.elements[i];\n
if ((e.name != 'allbox') && (e.type=='checkbox')) {\n

TotalBoxes++;\n
if (e.checked) {\n
TotalOn++;\n
}\n
}\n
}\n
if (TotalBoxes==TotalOn) {\n
document.peruid.allbox.checked=true;\n
} else {\n
document.peruid.allbox.checked=false;\n
}\n
}\n\n
-->\n
</script>";

?>

//////////////////////////////////////////////
El script funciona como deseo pero ahora me falta poder manejar las variables que obtengo
¿Cómo puedo sustituir el nombre de la función por la variable que me identifica el módulo, y el id por la variable que me identifica el proyecto?; es decir ¿cómo conjugo el codigo de Java con las variables que me da php?
Muchísimas gracias por todo.
Saludos
  #8 (permalink)  
Antiguo 09/06/2012, 07:20
Avatar de diamari  
Fecha de Ingreso: marzo-2012
Mensajes: 95
Antigüedad: 12 años
Puntos: 30
Respuesta: Checkbox por grupos en tabla dinámica

Veo el problema ahora y es buena ;). Existe vario opciones que puedes utilizar para resolverlo pero en esencial lo que necesitas es una forma de identificar cada checkbox de un modulo determinado.

Ahora pregunto, como esta tablas son generados automáticamente el nombre de todos es a_permiso[]? Se puede modificar este o implementar id? Esto buscando la forma mas simple de intentar de resolver esto.

En que navegadores estas probando tu código?
  #9 (permalink)  
Antiguo 09/06/2012, 08:21
 
Fecha de Ingreso: noviembre-2003
Mensajes: 78
Antigüedad: 20 años, 5 meses
Puntos: 0
Respuesta: Checkbox por grupos en tabla dinámica

Cita:
Iniciado por diamari Ver Mensaje
en esencial lo que necesitas es una forma de identificar cada checkbox de un modulo determinado.
Hola diamari
Efectivamente el problema es identificar tanto los checkbox como el Checkall de cada grupo y eso es lo que he hecho con 3 parámetros:
  • El nombre de la función CheckAll
  • El parámetro de entrada a la función
  • los identificadores de los checkbox individuale
Ahora lo que me queda, por ser una tabla dinámica, es que cada uno de estos parámetros sea una variable que tomo de mis script en php que son el nombre del módulo($modid) y el nombre de la base de datos del proyecto($bd) y eso aún no lo se hacer aunque estoy en ello.
Con respecto a cambiar el nombre del array no me interesa pues el array es el que recopila la información de acceso (duplas de modulo/proyecto) y así evitar tener que gestionar varios array para un mismo usuario. Se le podría cambiar el nombre pero con el mismo siempre y no trae ningún beneficio.
Muchas gracias
  #10 (permalink)  
Antiguo 09/06/2012, 08:29
 
Fecha de Ingreso: noviembre-2003
Mensajes: 78
Antigüedad: 20 años, 5 meses
Puntos: 0
Respuesta: Checkbox por grupos en tabla dinámica

Se me olvidó tu preguntasobre los navegadores...
Como estoy en mi casa (hoy es sábado) lo hago con IE 8 pero a la intranet de la empresa entran usuarios (empleados, clientes y proveedores) de más de 60 países que, supongo, usan los diferentes navegadores usuales y nunga han reportado problemas de gestión.
  #11 (permalink)  
Antiguo 09/06/2012, 10:10
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: Checkbox por grupos en tabla dinámica

Cita:
Iniciado por diamari Ver Mensaje
Veo el problema ahora y es buena ;). Existe vario opciones que puedes utilizar para resolverlo pero en esencial lo que necesitas es una forma de identificar cada checkbox de un modulo determinado.

Ahora pregunto, como esta tablas son generados automáticamente el nombre de todos es a_permiso[]? Se puede modificar este o implementar id? Esto buscando la forma mas simple de intentar de resolver esto.

En que navegadores estas probando tu código?
Por favor . lean detenidamente as soluciones propuestas, la solución ya fue indicada, basta con esto
Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <title>titulo</title>
  5. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  6. </head>
  7. <form action="#" method="post">
  8. <div>
  9. <input type="checkbox" name="cap[]" value="2" class="grupo1" />
  10. <input type="checkbox" name="cap[]" value="3" class="grupo1" />
  11. <input type="checkbox" name="cap[]" value="4" class="grupo1" />
  12. <input type="checkbox" name="cap[]" value="5" class="grupo1" />
  13. <br />
  14. <input type="checkbox" name="cap[]" value="6" class="grupo2"/>
  15. <input type="checkbox" name="cap[]" value="7" class="grupo2"/>
  16. <input type="checkbox" name="cap[]" value="8" class="grupo2"/>
  17. <input type="checkbox" name="cap[]" value="9" class="grupo2"/>
  18. <br /><br />
  19. <input type="button" value="marcar todo el grupo 1" onclick="MarcarTodos('grupo1');" />
  20. <input type="button" value="marcar todo el grupo 2"  onclick="MarcarTodos('grupo2');"/>
  21.  
  22. </div>
  23. </form>
  24. <script type="text/javascript">
  25. //<![CDATA[
  26. function MarcarTodos(laClase){
  27. var los_cboxes = document.getElementsByName('cap[]');
  28. for (var i = 0, j = los_cboxes.length; i < j; i++) {
  29.    
  30.    if(los_cboxes[i].className  == laClase){
  31.    los_cboxes[i].checked = true;
  32.    }
  33. }
  34.  
  35. }
  36. //]]>
  37. </body>
  38. </html>

Usas className y es suficiente para agrupar los checkboxes aunque tengan el mismo name, si se desea también se puede pasar el name como parámetro y hacer una doble condición. Y aun mejorarse con cambiar el estado a "desmarcar todos", usando el mismo botón y modificando el texto del mismo

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #12 (permalink)  
Antiguo 09/06/2012, 14:15
 
Fecha de Ingreso: noviembre-2003
Mensajes: 78
Antigüedad: 20 años, 5 meses
Puntos: 0
Respuesta: Checkbox por grupos en tabla dinámica

Cita:
Iniciado por emprear Ver Mensaje
Por favor . lean detenidamente as soluciones propuestas, la solución ya fue indicada, basta con esto
Amigo emprear, la solución que presentas bastará para ti pero no para mi que soy el que tiene que solucionar un problema de funcionalidad que me lleva ocupado bastantes horas y, además ya es la segunda vez que contestas de forma no adecuada. Te recomiendo que te tomes las situaciones con más calma pues yo ya tengo muchos años y no me gusta para nada la frase "basta con esto".
Puestos a leer te recomiendo que lo hagas, tambien detenidamente, con el título del post para que te asegures de que tu propuesta funciona en una tabla dinámica donde los parámetros a manejar son todo variables obtenidas con scripts de programación.
Ten en cuentas que en mi caso he de administrar más de cien grupos también variables com más de 5000 personas para gestionar más de 50 proyectos que cambian con frecuencia mensual y hasta semanal.
Yo entiendo mi problema y se que se puede resolver con los identificadores que maneja Javascript pero te repito que muy a pesar mío lo que no se es utilizar los indicadores con varables obtenidas con otros lenguajes, por ejemplo con php.
En todo caso, creo que estoy a punto de tirar la toalla y pasar el tema consultores externos pues parece que el tema me supera.
Muchas gracias y hasta la próxima.
  #13 (permalink)  
Antiguo 09/06/2012, 22:05
Avatar de diamari  
Fecha de Ingreso: marzo-2012
Mensajes: 95
Antigüedad: 12 años
Puntos: 30
Respuesta: Checkbox por grupos en tabla dinámica

Bueno el solución de emprear es uno que creo que puedes implementar aunque tendrías que añadir un poco mas de código php.

Antes que nada quiero preguntar si el código que tienes correr si des-comentas los otros checkall? Pregunto porque a mi no me resulta y de lo visto es debido a que nombraste todo los checkall allbox y pues no conoce cual quieres acceder. Para minimizar los cambios cree un arreglo con ellos y coloque el variable this. También estoy asumiendo que los valores de value son los mostrados. Verifica si esto te funciona:

Código:
<html>
<head>
	<title>Documento sin título</title>
</head>
<script>
function CheckAll(cajaCheck) {
	if (cajaCheck == document.peruid['allbox[]'][0]){
		for (var i=0;i<document.peruid['a_permiso[]'].length;i++){
			document.peruid['a_permiso[]'][i].checked = cajaCheck.checked;}
	}else{
		for (var i=1;i<document.peruid['allbox[]'].length;i++){
			if(cajaCheck == document.peruid['allbox[]'][i]){
				for (var j=0;j<document.peruid['a_permiso[]'].length;j++){
					var largoNum = 0;
					if (i > 9){
						largoNum = 1;
					}
					var miValor = document.peruid['a_permiso[]'][j].value.substr(0,7+largoNum);
					if(miValor == "$modid"+i){
						document.peruid['a_permiso[]'][j].checked = cajaCheck.checked;
					}
				}
			}			
		}
	}
}


function CheckCheckAll() {
	var TotalBoxes = 0;
	var TotalOn = 0;
	for (var i=0;i<document.peruid.elements.length;i++) {
		var e = document.peruid.elements[i];
		if ((e.name != 'allbox') && (e.type=='checkbox')) {
			TotalBoxes++;
			if (e.checked) {
				TotalOn++;
			}
		}
	}
	if (TotalBoxes==TotalOn) {
		document.peruid.allbox.checked=true;
	} else {
		document.peruid.allbox.checked=false;
	}
}

</script>
<body>
<form method="post" name="peruid">
<table border="1" width="80%" cellpadding="0" cellspacing="0">	
<tr>
<td width="20%">TODOS<br><input name="allbox[]" onClick="CheckAll(this);" type="checkbox" value="._CHECKALL."></td>
<td width="20%" colspan="4" align="center">PERMISOS DE GESTION A USUARIO XXXXX</td>
</tr>

<tr>
<td width="20%">DIVISIONES O PROYECTOS($bd)<br></td>
<td width="20%" align="center">Module($modid1)<br>DOC<br><input name="allbox[]" onclick="CheckAll(this);" type="checkbox" value="._CHECKALL."></td>
<td width="20%" align="center">Module($modid2)<br>GCMA<br><input name="allbox[]" onclick="CheckAll(this);" type="checkbox" value="._CHECKALL." ></td>
<td width="20%" align="center">Module($modid3)<br>PROY<br><input name="allbox[]" onclick="CheckAll(this);" type="checkbox" value="._CHECKALL." ></td>
<td width="20%" align="center">Module($modid4)<br>SCRM<br><input name="allbox[]" onclick="CheckAll(this);" type="checkbox" value="._CHECKALL." ></td>
</tr>
<tr>
<td width="20%">$bd1 PROYECTO1</td>
<td width="20%" align="center"><input type="checkbox" name="a_permiso[]" value="$modid1$bd1"></td>
<td width="20%" align="center"><input type="checkbox" name="a_permiso[]" value="$modid1$bd2"></td>
<td width="20%" align="center"><input type="checkbox" name="a_permiso[]" value="$modid1$bd3"></td>
<td width="20%" align="center"><input type="checkbox" name="a_permiso[]" value="$modid1$bd4"></td>
</tr>
<tr>
<td width="20%">$bd2 PROYECTO 2</td>
<td width="20%" align="center"><input type="checkbox" name="a_permiso[]" value="$modid2$bd1"></td>
<td width="20%" align="center"><input type="checkbox" name="a_permiso[]" value="$modid2$bd2"></td>
<td width="20%" align="center"><input type="checkbox" name="a_permiso[]" value="$modid2$bd3"></td>
<td width="20%" align="center"><input type="checkbox" name="a_permiso[]" value="$modid2$bd4"></td>
</tr>
<tr>
<td width="20%">$bd3 DIVISION 3</td>
<td width="20%" align="center"><input type="checkbox" name="a_permiso[]" value="$modid3$bd1"></td>
<td width="20%" align="center"><input type="checkbox" name="a_permiso[]" value="$modid3$bd1"></td>
<td width="20%" align="center"><input type="checkbox" name="a_permiso[]" value="$modid3$bd3"></td>
<td width="20%" align="center"><input type="checkbox" name="a_permiso[]" value="$modid3$bd4"></td>
</tr>
<tr>
<td width="20%">$bd4 DIVISION 4</td>
<td width="20%" align="center"><input type="checkbox" name="a_permiso[]" value="$modid4$bd1"></td>
<td width="20%" align="center"><input type="checkbox" name="a_permiso[]" value="$modid4$bd2"></td>
<td width="20%" align="center"><input type="checkbox" name="a_permiso[]" value="$modid4$bd3"></td>
<td width="20%" align="center"><input type="checkbox" name="a_permiso[]" value="$modid4$bd4"></td>
</tr>
</table>
</form>
</body>
</html>
Un poco mas complicado de lo que me gustaría pero dado los restricciones creo que no esta muy fuera de control.
  #14 (permalink)  
Antiguo 10/06/2012, 05:57
 
Fecha de Ingreso: noviembre-2003
Mensajes: 78
Antigüedad: 20 años, 5 meses
Puntos: 0
Respuesta: Checkbox por grupos en tabla dinámica

Hola diamari:
En primer lugar quiero agradecerte el esfuerzo que estás poniendo para ayudarme. Esta es el tono que uno espera de este foro pero que a algunos se les olvida.

Con respecto a tu propuesta la he visto y, en principio tiene alguna falla de funcionalidad como, por ejemplo, que cuando seleccionas los CheckAll de los módulos (DOC,GMCA, etc..) no marcas los inputs (en columna) del módulo sino que acivas los inputs (en linea) de los proyectos y divisiones. Posiblemente esto se podrá arreglar con la disposición del arreglo de la tabla pues al final se consigue lo que se desea que es basicmente obtener un arrary (array_permiso) con los valores de las posibles combinaciones $modid y $bd que es lo que define los permisosde gestión del usuario.

Pero no perdamos la perspectiva más importante que es que estamos empleando una tabla dinámica con numerosos valores variables de módulos, proyectos, divisiones y usuarios que proceden de registros de bases de datos y que la única manera de presentarlos en la matriz a base de select, while, loop,etc... (imagínate tener que presentar una matriz con más de 50 módulos y 300 proyectos). El tema está en pasar dichas variables para que funcionen en lenguaje Javacript que es lo que yo no se hacer).
Bueno diamari ratifico mi agradecimiento y no te preocupes que, tal como le comenté a tu compañero emprear, pasaré este asunto a especialistas que estoy seguro encontrarán una solución adecuada.
Muchísimas gracias y saludos cordiales.
R.Saralegui
  #15 (permalink)  
Antiguo 10/06/2012, 10:13
Avatar de diamari  
Fecha de Ingreso: marzo-2012
Mensajes: 95
Antigüedad: 12 años
Puntos: 30
Respuesta: Checkbox por grupos en tabla dinámica

Cita:
Iniciado por caitoss Ver Mensaje

Con respecto a tu propuesta la he visto y, en principio tiene alguna falla de funcionalidad como, por ejemplo, que cuando seleccionas los CheckAll de los módulos (DOC,GMCA, etc..) no marcas los inputs (en columna) del módulo sino que acivas los inputs (en linea) de los proyectos y divisiones. Posiblemente esto se podrá arreglar con la disposición del arreglo de la tabla pues al final se consigue lo que se desea que es basicmente obtener un arrary (array_permiso) con los valores de las posibles combinaciones $modid y $bd que es lo que define los permisosde gestión del usuario.
Con un pequeño ajuste se podrá cambiar esto, es que no sabia que querías selecionar.

Cita:
Iniciado por caitoss Ver Mensaje
Pero no perdamos la perspectiva más importante que es que estamos empleando una tabla dinámica con numerosos valores variables de módulos, proyectos, divisiones y usuarios que proceden de registros de bases de datos y que la única manera de presentarlos en la matriz a base de select, while, loop,etc... (imagínate tener que presentar una matriz con más de 50 módulos y 300 proyectos). El tema está en pasar dichas variables para que funcionen en lenguaje Javacript que es lo que yo no se hacer).
No se estoy interpretando bien esto pero básica lo que quieres decir es que los valores no siempre va ser $modid2$bd1? Dependiendo como cambiar este se puede hacer que funcione.

Cita:
Iniciado por caitoss Ver Mensaje
Bueno diamari ratifico mi agradecimiento y no te preocupes que, tal como le comenté a tu compañero emprear, pasaré este asunto a especialistas que estoy seguro encontrarán una solución adecuada.
Muchísimas gracias y saludos cordiales.
R.Saralegui
A veces este es el mejor solución.
  #16 (permalink)  
Antiguo 10/06/2012, 12:56
 
Fecha de Ingreso: noviembre-2003
Mensajes: 78
Antigüedad: 20 años, 5 meses
Puntos: 0
Respuesta: Checkbox por grupos en tabla dinámica

Cita:
Iniciado por diamari Ver Mensaje
Con un pequeño ajuste se podrá cambiar esto, es que no sabia que querías selecionar.:
No me aguanté y yo la solucioné y tu script tal como lo enviste funcionaba perfectamente.En principo !excelente!
Cita:
No se estoy interpretando bien esto pero básica lo que quieres decir es que los valores no siempre va ser $modid2$bd1? Dependiendo como cambiar este se puede hacer que funcione.
Lo que quiero decir es que cada modulo tiene un valor ($modid) diferente y cada proyecto un valor ($bd) tambien diferentes.La combinación es siempre la misma

Trate de hacerlo funcionar en código php dando valores reales a las variables variables $bd1="1000"; $bd2="2000"; bd3="3000"; $bd4="4000"; $modid1="DOC"; $modid2="GCMA"; modid3="PROY"; $modid4="SCRM"; y el CheckAll pricipal funciona perfectamente pero dejó de actuar los CheckAll de cada módulo.
Esto puede ser debido a la var -mi valor- que utilizas en la función CheckALL ($modid) que lógicamente yo no la puedo introducir porque no dispongo de las BBDD para hacer los select correspondietes sin meter el código completo de php y a estas horas ya no me da tiemo.
Por cierto me puedes explicar ¿qué haces con estas lineas? porque yo creo que ahí está el problema:

var miValor = document.peruid['a_permiso[]'][j].value.substr(0,7+largoNum);
if(miValor == "$modid"+i){
document.peruid['a_permiso[]'][j].checked = cajaCheck.checked;
}

Nuevamente muchas gracias. Hemos avanzado mucho
  #17 (permalink)  
Antiguo 11/06/2012, 05:04
Avatar de diamari  
Fecha de Ingreso: marzo-2012
Mensajes: 95
Antigüedad: 12 años
Puntos: 30
Respuesta: Checkbox por grupos en tabla dinámica

Cita:
Iniciado por caitoss Ver Mensaje
Por cierto me puedes explicar ¿qué haces con estas lineas? porque yo creo que ahí está el problema:

var miValor = document.peruid['a_permiso[]'][j].value.substr(0,7+largoNum);
if(miValor == "$modid"+i){
document.peruid['a_permiso[]'][j].checked = cajaCheck.checked;
}

Nuevamente muchas gracias. Hemos avanzado mucho
Estoy seleccionando solamente la primera mitad del valor osea $modid1 o $modid2 etc. Como estoy recorriendo el arreglo a_permiso y pensaba que había que seleccionar todo los $modid1 así es como lo logre.
  #18 (permalink)  
Antiguo 11/06/2012, 08:46
Avatar de diamari  
Fecha de Ingreso: marzo-2012
Mensajes: 95
Antigüedad: 12 años
Puntos: 30
Respuesta: Checkbox por grupos en tabla dinámica

Pensado tu otro opción es recorrer por los elementos a trávez de la tabla pero es un poco mas de trabajo ya que vas a tener que verificar que los elementos en ellas son las que quieres modificar y utilizar los td y tr como divisores.

Un ejemplo seria:
Código HTML:
Ver original
  1. var tabla = document.getElementById("mitab1");
  2. for (var i = 0, row; row = tabla.rows[i]; i++) {
  3.    //recorrer por las filas
  4.    //acceder a las filas con el variable "row" asignado en el bucle
  5.    for (var j = 0, col; col = row.cells[j]; j++) {
  6.      //recorrer por las columnas
  7.      ///acceder a las filas con el variable "col" asignado en el bucle
  8.    }  
  9. }
  #19 (permalink)  
Antiguo 11/06/2012, 09:53
 
Fecha de Ingreso: noviembre-2003
Mensajes: 78
Antigüedad: 20 años, 5 meses
Puntos: 0
Respuesta: Checkbox por grupos en tabla dinámica

Cita:
Iniciado por diamari Ver Mensaje
Estoy seleccionando solamente la primera mitad del valor osea $modid1 o $modid2 etc. Como estoy recorriendo el arreglo a_permiso y pensaba que había que seleccionar todo los $modid1 así es como lo logre.
Me que estabas tratando de buscar el titulo de módulo a a partir del value de a_permiso. En ese caso sería value.substr(0,4); pero sól funcionaría cuando los módulos tuvieren siempre 4 caracteres que no es el caso.
Ahora bien para qué necesitas ver esto a partir del value de a_array si el tdato ya existe en cabecera como componentes del array de titulos: $modid[0], $modid[1], $modid[2] y $modid[3].....
Ahí vuelve el problema ¿como paso el array de títulos a una variable (miValor) de Javascript
  #20 (permalink)  
Antiguo 11/06/2012, 13:09
 
Fecha de Ingreso: noviembre-2003
Mensajes: 78
Antigüedad: 20 años, 5 meses
Puntos: 0
Respuesta: Checkbox por grupos en tabla dinámica

Listo Diamari:
puedes ver funcionando tu script con valores extraidos de aplicación en php y sus based de dtos( que me inventé para esta prueba en este enlace
http://rsaralegui.com/modules.php?name=Addon_Sample
Solo tuve que hacer unos pequeños cambios a tu propuesta:
  • Meter como value de los allbox de los módulos el título de los mismos a partir del array de títulos que generé como cabecera: $modid[$n]<input name="allbox[]" onclick="CheckAll(this);" type="checkbox" value="$modid[$n]" >
  • Crear una var miModulo y, siguiento tu procedimiento compararlo con los value de a_permiso. Para ello tuve que calcular la long. de garacteres y extraerle 4 pues las $bs siempre tienen 4 caracteres mientras que los títulos tienen una log. variable.

La realidad es que con este asunto he conocido algo el lenguaje javascript (yo lo manejo muy poco) y creo que voy a leer cuando tenga algún tiempo libre pues parace muy interesante.
Bueno Diamari quiero que sepas que sin tu ayuda no podría haber terminado con esto por lo que me siento muy agradecido y quedo a tu disposición para lo que consideres oportuno.
Saludos y muchas gracias.



El script quedaría así:

function CheckAll(cajaCheck) {
if (cajaCheck == document.peruid['allbox[]'][0]){
for (var i=0;i<document.peruid['a_permiso[]'].length;i++){
document.peruid['a_permiso[]'][i].checked = cajaCheck.checked;}
}else{
for (var i=1;i<document.peruid['allbox[]'].length;i++){
var miModulo= document.peruid['allbox[]'][i].value;
if(cajaCheck == document.peruid['allbox[]'][i]){
for (var j=0;j<document.peruid['a_permiso[]'].length;j++){
var numCa = document.peruid['a_permiso[]'][j].value.length;
var numC= numCa-4;
var miValor = document.peruid['a_permiso[]'][j].value.substring(0,numC);
if(miValor == miModulo){
document.peruid['a_permiso[]'][j].checked = cajaCheck.checked;
}
}
}
}
}
}
  #21 (permalink)  
Antiguo 12/06/2012, 03:43
Avatar de diamari  
Fecha de Ingreso: marzo-2012
Mensajes: 95
Antigüedad: 12 años
Puntos: 30
Respuesta: Checkbox por grupos en tabla dinámica

Me alegro que pude ayudar, para eso entro a este foro y te invito a invertir un poco de tiempo en este tema ya que js sigue empujándose para ser idioma prominente.

Etiquetas: checkbox, funcion, grupos, input, php, tabla
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 07:49.