Foros del Web » Programando para Internet » Javascript »

Problema al seleccionar checkboxes y pintar celdas.

Estas en el tema de Problema al seleccionar checkboxes y pintar celdas. en el foro de Javascript en Foros del Web. Hola, Tengo un problema con el siguiente código: Código: <?php include('db.php'); ?> <html> <head> <style> .small { font-size: 12px; font-weight:bold; color:#003333; font-family:Verdana, Arial, Helvetica, sans-serif; ...
  #1 (permalink)  
Antiguo 30/04/2007, 19:12
 
Fecha de Ingreso: abril-2007
Mensajes: 3
Antigüedad: 17 años
Puntos: 0
Exclamación Problema al seleccionar checkboxes y pintar celdas.

Hola,

Tengo un problema con el siguiente código:

Código:
<?php
include('db.php');
?>
<html>
<head>
<style>
.small {
font-size: 12px;
font-weight:bold;
color:#003333;
font-family:Verdana, Arial, Helvetica, sans-serif;
}
.tabla{
font-size:10px;
font-family:Verdana, Arial, Helvetica, sans-serif;
color:#003366;
}
.tabla a{
color:#8EA2B3;
font-family:Tahoma;
font-size:10px;
text-decoration:none;
}
.tabla a:hover{
color:#8EA2B3;
font-family:Tahoma;
font-size:10px;
text-decoration:underline;
}
</style>
<script>
isIE=document.all?true:false;
var isNS4=document.layers?true:false;
var isNS6=navigator.userAgent.indexOf("Gecko")!=-1?true:false;
	function coloreaf(_v,num){
		var res;
		res=num%2;
			if(eval("document.nombreform.op"+_v+".checked")==1){
				eval("document.nombreform.op"+_v+".checked=0");
					}
			else{
				eval("document.nombreform.op"+_v+".checked=1");
					}
			if(res==0){
			var bC=new Array('#CC9900','white');//(primera color ya clikeada,nose)
			var C=new Array('white','black');
					 }
			else{
			var bC=new Array('#FFCC33','white');//(primera ya clikeada,nose)
			var C=new Array('white','black');
					}
			var X=eval("document.nombreform.op"+_v+".checked?0:1");
		if(isIE) {
			eval("t"+_v+".style.backgroundColor=bC[X]");
			eval("t"+_v+".style.color=C[X]");
					} if(isNS6) {
			document.getElementById("t"+_v).style.backgroundColor=bC[X]; document.getElementById("t"+_v).style.color=C[X];
					 }
			 }
</script>
<script>
isIE=document.all?true:false;
var isNS4=document.layers?true:false;
var isNS6=navigator.userAgent.indexOf("Gecko")!=-1?true:false;
	function colorea(_v,num){
		var res;
		res=num%2;
			if(eval("document.nombreform.op"+_v+".checked")==1){
				eval("document.nombreform.op"+_v+".checked=0");
					}
			else{
				eval("document.nombreform.op"+_v+".checked=1");
					 }
			if(res==0){
				var bC=new Array('#062F83','white');
				var C=new Array('white','black');
					}
				else {
				var bC=new Array('#062F83','#DFEBFF');
				var C=new Array('white','black');
					}
				var X=eval("document.nombreform.op"+_v+".checked?0:1");
			if(isIE){
				eval("t"+_v+".style.backgroundColor=bC[X]");
				eval("t"+_v+".style.color=C[X]");
				}
			if(isNS6){
			document.getElementById("t"+_v).style.backgroundColor=bC[X];
			document.getElementById("t"+_v).style.color=C[X];
				}
		 }
</script>
<script>
isIE=document.all?true:false;
var isNS4=document.layers?true:false;
var isNS6=navigator.userAgent.indexOf("Gecko")!=-1?true:false;
	function coloreamosin(_v,num){
		var res;
		res=num%2;
		if(eval("document.nombreform.op"+_v+".checked")==0){
			//aqui intercalamos los colores %2 del mouse over ;)
			if(res==0){
				document.getElementById("t"+_v).style.backgroundColor="#4F80FF";
				document.getElementById("t"+_v).style.color="white";
					}
			else{
				document.getElementById("t"+_v).style.backgroundColor="#4F80FF";
				document.getElementById("t"+_v).style.color="white";
					}
				}
			}
</script>
<script>
isIE=document.all?true:false;
var isNS4=document.layers?true:false;
var isNS6=navigator.userAgent.indexOf("Gecko")!=-1?true:false;
	function coloreamosout(_v,num){
		var res;
		res=num%2;
			if(eval("document.nombreform.op"+_v+".checked")==0){
			if(res==0){
				document.getElementById("t"+_v).style.backgroundColor="#ffffff";
				document.getElementById("t"+_v).style.color="black";
					}
			else{
				document.getElementById("t"+_v).style.backgroundColor="#DFEBFF";
				document.getElementById("t"+_v).style.color="black";
					}
				}
			}
function checkUncheckAll(theElement) {
     var theForm = theElement.form, z = 0;
	 for(z=0; z<theForm.length;z++){
	     if(theForm[z].type == 'checkbox' && theForm[z].name != 'checkall'){
	 		 theForm[z].checked = theElement.checked;
	  			}
		     }
    }

</script>
</head>
<form action="prod_sppb.php" method="post" name="nombreform">
<table align="center" bgcolor="#AAAAAA" border="0" cellpadding="0" cellspacing="0" width="750">
	<tr>
		<td><table align="center" border="0" cellpadding="4" cellspacing="1" width="100%">
				<tr bgcolor="#ccddee" class="small">
					<td align="center">Id<br /><input type="checkbox" name="checkall" onClick="checkUncheckAll(this);"/></td>
					<td>Nombre</td>
					<td>Obra</td>
					<td>Localización</td>
					<td>Fecha</td>
					<td>Foto</td>
					<td>Notas</td>
					<td>Acciones</td>
				</tr>

<?php

$color = "#DFEBFF";
$i = 0;


	$result = mysql_query("SELECT * FROM `clientes` JOIN imagenes ON `clientes`.`Id_clientes`=`imagenes`.`Id_imagenes` ORDER BY `clientes`.`Id_clientes` DESC", $link);
		
		while ($row = mysql_fetch_row($result)){
		
			$color = ($color == "#DFEBFF") ? "#FFFFFF" : "#DFEBFF";
			
			$i++;
			
			echo "<tr bgcolor=\"".$color."\" class=\"tabla\" id=t".$row[0]." onclick='coloreaf(".$row[0].",".$row[0].")' onMouseOver='coloreamosin(".$row[0].",".$row[0].")' onMouseOut='coloreamosout(".$row[0].",".$row[0].")'>\n";
			echo "<td align=\"center\">".$row[0]." <input name='op".$row[0]."' type='checkbox' onclick='colorea(".$row[0].",".$row[0].")'></td>\n";
			echo "<td>".$row[1]."</td>\n";
			echo "<td>".$row[2]."</td>\n";
			echo "<td>".$row[3]."</td>\n";
			echo "<td>".$row[4]."</td>\n";
			echo "<td><img src=\"../../../".$row[6]."\"></td>\n";
			echo "<td>Notas</td>\n";
			echo "<td><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\" class=\"tabla\">
							<tr>
								<td><a href=\"ver.php?id=".$row[0]."\">Ver</a> | <a href=\"borrar.php?id=".$row[0]."\">Borrar</a> | <a href=\"editar.php?id=".$row[0]."\">Editar</a></td>
							</tr>
						</table></td>\n";
			echo "</tr>";
			}
?>
		</table></td>
	</tr>
</table>
</form>
</body>
</html>
Cuando selecciono el primer checkbox todos los demas se seleccionan pero tengo una funcion que pinta las filas al estar seleccionado y por ese método no lo hace.

La verdad es que no sé mucho de js y agradecería mucho su ayuda.

Gracias

Última edición por corrupto; 01/05/2007 a las 01:33
  #2 (permalink)  
Antiguo 01/05/2007, 10:29
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Problema al seleccionar checkboxes y pintar celdas.

Deberías colocar aquí código (x)HTML puro, sin PHP. Además no estaría mal simplificarlo: el CSS sólo hace que tener más texto que leer.

Un código que acabo de hacer te servirá para tu propósito supongo:

Código PHP:
<script type="text/javascript">


/******************
    FUNCION PARA COLOREAR CELDAS, FILAS O TABLAS (según tagPadre)
******************/
function colorea(celda,tagPadre,col) {
    
// subiremos un nivel en el DOM mientras el elemento actual no tenga el tag tagPadre
    
while( celda.nodeType==&& celda.tagName.toUpperCase()!=tagPadre.toUpperCase() )
        
celda=celda.parentNode;
    
celda.style.backgroundColor=col;
}

/******************
    FUNCION PARA MARCAR TODOS LOS CHECKBOXES CONTENIDOS EN UNA TABLA
******************/
function todosChkDeTabla(obj,check) {
    while( 
obj.nodeType==&& obj.tagName.toUpperCase()!="TABLE" )
        
obj=obj.parentNode;
    
//obj ahra es la TABLE sobre la que trabajamos
    
function recorrerHijos(elem) {
        if(
elem.nodeType==&& elem.tagName.toUpperCase()=="INPUT" && elem.type=="checkbox") {    // tipo ELEMENT_NODE y encima es checkbox
            
elem.checked=check;
            
colorea(elem,'TR'check?'#aaf':'transparent' );
        }
        else if (
elem.nodeType==&& elem.hasChildNodes() ) {        //ELEMENT_NODE y encima con hijos
            
for(var hijo=0hijo<elem.childNodes.lengthhijo++)        //recorremos cada hijo con la función, recursivamente
                
recorrerHijoselem.childNodes[hijo] );
        }
    }
    
recorrerHijos(obj);        //recorremos sus hijos y encontramos checkboxes para marcarlos
}

</script>



<table id="tabla" border="1">
    <tr>
        <td colspan="3"><input type="checkbox" onclick="todosChkDeTabla(this,this.checked);" /></td>
    </tr>
    <tr>
        <td><input type="checkbox" onclick="colorea(this,'TR', this.checked?'#aaf':'transparent' );" /></td>
        <td>loren</td>
        <td>ipsum</td>
    </tr>
    <tr>
        <td><input type="checkbox" onclick="colorea(this,'TR', this.checked?'#aaf':'transparent' );" /></td>
        <td>dolor</td>
        <td>sit</td>
    </tr>
    <tr>
        <td><input type="checkbox" onclick="colorea(this,'TR', this.checked?'#aaf':'transparent' );" /></td>
        <td>amet</td>
        <td>loren</td>
    </tr>
    <tr>
        <td><input type="checkbox" onclick="colorea(this,'TR', this.checked?'#aaf':'transparent' );" /></td>
        <td>ipsum</td>
        <td>dolor</td>
    </tr>
</table> 
Lo he intentado hacer lo más claro posible.


Saludos.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #3 (permalink)  
Antiguo 01/05/2007, 18:36
 
Fecha de Ingreso: abril-2007
Mensajes: 3
Antigüedad: 17 años
Puntos: 0
Re: Problema al seleccionar checkboxes y pintar celdas.

Hola,

Gracias por responder. Sí, de hecho es exactamente lo que quiero hacer (seleccionar el checkbox 'padre' y pintar las celdas) pero he intentado adecuar tu código al mio y no he podido.

Te dejo el mio para que lo pruebes:

Código:
<script>
isIE=document.all?true:false;
var isNS4=document.layers?true:false;
var isNS6=navigator.userAgent.indexOf("Gecko")!=-1?true:false;
	function coloreaf(_v,num){
		var res;
		res=num%2;
			if(eval("document.nombreform.op"+_v+".checked")==1){
				eval("document.nombreform.op"+_v+".checked=0");
					}
			else{
				eval("document.nombreform.op"+_v+".checked=1");
					}
			if(res==0){
			var bC=new Array('#0099FF','white');//(primera color ya clikeada,nose)
			var C=new Array('white','black');
					 }
			else{
			var bC=new Array('#0099FF','#DFEBFF');//(primera ya clikeada,nose)
			var C=new Array('white','black');
					}
			var X=eval("document.nombreform.op"+_v+".checked?0:1");
		if(isIE) {
			eval("t"+_v+".style.backgroundColor=bC[X]");
			eval("t"+_v+".style.color=C[X]");
					} if(isNS6) {
			document.getElementById("t"+_v).style.backgroundColor=bC[X]; document.getElementById("t"+_v).style.color=C[X];
					 }
			 }
</script>
<script>
isIE=document.all?true:false;
var isNS4=document.layers?true:false;
var isNS6=navigator.userAgent.indexOf("Gecko")!=-1?true:false;
	function colorea(_v,num){
		var res;
		res=num%2;
			if(eval("document.nombreform.op"+_v+".checked")==1){
				eval("document.nombreform.op"+_v+".checked=0");
					}
			else{
				eval("document.nombreform.op"+_v+".checked=1");
					 }
			if(res==0){
				var bC=new Array('#062F83','white');
				var C=new Array('white','black');
					}
				else {
				var bC=new Array('#062F83','#DFEBFF');
				var C=new Array('white','black');
					}
				var X=eval("document.nombreform.op"+_v+".checked?0:1");
			if(isIE){
				eval("t"+_v+".style.backgroundColor=bC[X]");
				eval("t"+_v+".style.color=C[X]");
				}
			if(isNS6){
			document.getElementById("t"+_v).style.backgroundColor=bC[X];
			document.getElementById("t"+_v).style.color=C[X];
				}
		 }
</script>
<script>
isIE=document.all?true:false;
var isNS4=document.layers?true:false;
var isNS6=navigator.userAgent.indexOf("Gecko")!=-1?true:false;
	function coloreamosin(_v,num){
		var res;
		res=num%2;
		if(eval("document.nombreform.op"+_v+".checked")==0){
			//aqui intercalamos los colores %2 del mouse over ;)
			if(res==0){
				document.getElementById("t"+_v).style.backgroundColor="#4F80FF";
				document.getElementById("t"+_v).style.color="#003366";
					}
			else{
				document.getElementById("t"+_v).style.backgroundColor="#4F80FF";
				document.getElementById("t"+_v).style.color="#003366";
					}
				}
			}
</script>
<script>
isIE=document.all?true:false;
var isNS4=document.layers?true:false;
var isNS6=navigator.userAgent.indexOf("Gecko")!=-1?true:false;
	function coloreamosout(_v,num){
		var res;
		res=num%2;
			if(eval("document.nombreform.op"+_v+".checked")==0){
			if(res==0){
				document.getElementById("t"+_v).style.backgroundColor="#ffffff";
				document.getElementById("t"+_v).style.color="#003366";
					}
			else{
				document.getElementById("t"+_v).style.backgroundColor="#DFEBFF";
				document.getElementById("t"+_v).style.color="#003366";
					}
				}
			}
function checkUncheckAll(theElement) {
     var theForm = theElement.form, z = 0;
	 for(z=0; z<theForm.length;z++){
	     if(theForm[z].type == 'checkbox' && theForm[z].name != 'checkall'){
	 		 theForm[z].checked = theElement.checked;
	  			}
		     }
    }

</script>
</head>
<form action="prod_sppb.php" method="get" name="nombreform">
<table align="center" bgcolor="#AAAAAA" border="0" cellpadding="0" cellspacing="0" width="750">
	<tr>

		<td><table align="center" border="0" cellpadding="4" cellspacing="1" width="100%">
				<tr bgcolor="#ccddee" class="small">
					<td align="center">Id<br /><input type="checkbox" name="checkall" onClick="checkUncheckAll(this);"/></td>
					<td>Nombre</td>
					<td>Obra</td>
					<td>Localización</td>
					<td>Fecha</td>

					<td>Foto</td>
					<td>Notas</td>
					<td>Acciones</td>
				</tr>

<tr bgcolor="#FFFFFF" class="tabla" id=t212 onclick='coloreaf(212,212)' onMouseOver='coloreamosin(212,212)' onMouseOut='coloreamosout(212,212)'>
<td align="center">212 <input name='op212' type='checkbox' onclick='colorea(212,212)'></td>
<td>INTERNATIONAL FLAVOR AND FRAGANCES (MÉXICO)</td>

<td>CONSTRUCCION DE EDIFICIO DE CENTRO CREATIVO</td>
<td>Tlalnepantla, Edo. de México</td>
<td>2005</td>
<td><img src="../../../imagenes/desarrollos/img_null.png"></td>
<td>Notas</td>
<td><table border="0" cellpadding="0" cellspacing="0" width="100%" class="tabla">
							<tr>
								<td><a href="ver.php?id=212"><img src="images/lupa.png" alt="Ver registro 212" title="Ver registro 212" border="0"></a></td>
								<td><a href="editar.php?id=212"><img src="images/edit.png" alt="Editar registro 212" title="Editar registro 212" border="0"></a></td>
								<td><a href="borrar.php?id=212"><img src="images/borrar.png" alt="Borrar registro 212" title="Borrar registro 212" border="0"></a></td>

							</tr>
						</table></td>
</tr><tr bgcolor="#DFEBFF" class="tabla" id=t211 onclick='coloreaf(211,211)' onMouseOver='coloreamosin(211,211)' onMouseOut='coloreamosout(211,211)'>
<td align="center">211 <input name='op211' type='checkbox' onclick='colorea(211,211)'></td>
<td>PROCESS TECHNOLOGY SOLUTIONS</td>
<td>INSTALACION ELECTRICA  PLANTA CAFIVER</td>
<td>Orizaba, Veracruz</td>
<td>2005</td>
<td><img src="../../../imagenes/desarrollos/img_211.png"></td>
<td>Notas</td>

<td><table border="0" cellpadding="0" cellspacing="0" width="100%" class="tabla">
							<tr>
								<td><a href="ver.php?id=211"><img src="images/lupa.png" alt="Ver registro 211" title="Ver registro 211" border="0"></a></td>
								<td><a href="editar.php?id=211"><img src="images/edit.png" alt="Editar registro 211" title="Editar registro 211" border="0"></a></td>
								<td><a href="borrar.php?id=211"><img src="images/borrar.png" alt="Borrar registro 211" title="Borrar registro 211" border="0"></a></td>
							</tr>
						</table></td>
</tr><tr bgcolor="#FFFFFF" class="tabla" id=t210 onclick='coloreaf(210,210)' onMouseOver='coloreamosin(210,210)' onMouseOut='coloreamosout(210,210)'>
<td align="center">210 <input name='op210' type='checkbox' onclick='colorea(210,210)'></td>
<td>INTERNACIONAL FLAVOR AND FRAGANCES (MÉXICO)</td>

<td>INSTALACION ELECTRICA PLANTA DE FRAGANCIAS</td>
<td>Tlalnepantla, Edo. de México</td>
<td>2004</td>
<td><img src="../../../imagenes/desarrollos/img_210.png"></td>
<td>Notas</td>
<td><table border="0" cellpadding="0" cellspacing="0" width="100%" class="tabla">
							<tr>
								<td><a href="ver.php?id=210"><img src="images/lupa.png" alt="Ver registro 210" title="Ver registro 210" border="0"></a></td>
								<td><a href="editar.php?id=210"><img src="images/edit.png" alt="Editar registro 210" title="Editar registro 210" border="0"></a></td>
								<td><a href="borrar.php?id=210"><img src="images/borrar.png" alt="Borrar registro 210" title="Borrar registro 210" border="0"></a></td>

							</tr>
						</table></td>
</tr><tr bgcolor="#DFEBFF" class="tabla" id=t209 onclick='coloreaf(209,209)' onMouseOver='coloreamosin(209,209)' onMouseOut='coloreamosout(209,209)'>
<td align="center">209 <input name='op209' type='checkbox' onclick='colorea(209,209)'></td>
<td>GATES   RUBBER   DE   MEXICO   S.A.  DE  C.V.</td>
<td>INGENIERIA CIVIL, ELECTRICA Y MECANICA PARA  PROYECTO TT2</td>
<td>Toluca, Edo. de México.</td>
<td>2004</td>
<td><img src="../../../imagenes/desarrollos/img_209.png"></td>
<td>Notas</td>

<td><table border="0" cellpadding="0" cellspacing="0" width="100%" class="tabla">
							<tr>
								<td><a href="ver.php?id=209"><img src="images/lupa.png" alt="Ver registro 209" title="Ver registro 209" border="0"></a></td>
								<td><a href="editar.php?id=209"><img src="images/edit.png" alt="Editar registro 209" title="Editar registro 209" border="0"></a></td>
								<td><a href="borrar.php?id=209"><img src="images/borrar.png" alt="Borrar registro 209" title="Borrar registro 209" border="0"></a></td>
							</tr>
						</table></td>
</tr><tr bgcolor="#FFFFFF" class="tabla" id=t208 onclick='coloreaf(208,208)' onMouseOver='coloreamosin(208,208)' onMouseOut='coloreamosout(208,208)'>
<td align="center">208 <input name='op208' type='checkbox' onclick='colorea(208,208)'></td>
<td>GATES   RUBBER   DE   MEXICO   S.A.  DE  C.V.</td>

<td>INSTALACIÓN  ELECTRICA  Y  MECANICA DE EQUIPO DE LA EXPANSIÓN DE  HYPAK</td>
<td>Cuautitlán, Edo. de México.</td>
<td>2003</td>
<td><img src="../../../imagenes/desarrollos/img_null.png"></td>
<td>Notas</td>
<td><table border="0" cellpadding="0" cellspacing="0" width="100%" class="tabla">
							<tr>
								<td><a href="ver.php?id=208"><img src="images/lupa.png" alt="Ver registro 208" title="Ver registro 208" border="0"></a></td>
								<td><a href="editar.php?id=208"><img src="images/edit.png" alt="Editar registro 208" title="Editar registro 208" border="0"></a></td>
								<td><a href="borrar.php?id=208"><img src="images/borrar.png" alt="Borrar registro 208" title="Borrar registro 208" border="0"></a></td>

							</tr>
						</table></td>
</tr>
</table></td>
	</tr>
</table>
Muchas gracias!
  #4 (permalink)  
Antiguo 02/05/2007, 00:41
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Problema al seleccionar checkboxes y pintar celdas.

La verdad es que al tener varias tablas anidadas habría que pensar un poquito más..
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #5 (permalink)  
Antiguo 02/05/2007, 02:09
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Re: Problema al seleccionar checkboxes y pintar celdas.

Hola corrupto, bienvenido a los foros :

La verdad es que complicas bastante el código con cosas obsoletas como la diferenciación de navegadores... El sistema de nodos como el ejemplo de derkenuke es estándar y es muy difícil que te visiten con un navegador que implemente layers (viejos netscape's).

Tal vez el código de esta página pueda ayudarte: Consultas

Si te sirve y no sabes implementarlo, avisa.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #6 (permalink)  
Antiguo 02/05/2007, 08:21
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Problema al seleccionar checkboxes y pintar celdas.

Bueno, pues ya he modificado mi script para tablas anidadas. Si antes era complicado de entender, ahora no te imaginas...

El script es corto, pero rebuscado, como me suelen gustar últimamente
Código:
/******************
	FUNCION PARA COLOREAR CELDAS, FILAS O TABLAS (según tagPadre)
******************/
function colorea(obj,tagPadre,niveles) {
	var col= obj.checked ? "#aaf" : "transparent";
	// encontrar con parentNode un obj con tag tagPadre tantas veces como niveles se nos pasen por argumento
	for(var nivelActual=0; nivelActual<niveles; nivelActual++) {
		obj=obj.parentNode;	
		while( obj.nodeType==1 && obj.tagName.toUpperCase()!=tagPadre.toUpperCase() )
			obj=obj.parentNode;
	}
	obj.style.backgroundColor=col;
}

/******************
	FUNCION PARA MARCAR TODOS LOS CHECKBOXES CONTENIDOS EN UNA TABLA QUE SEAN PARA COLOREAR
******************/
function todosChkDeTabla(obj,check) {
	while( obj.nodeType==1 && obj.tagName.toUpperCase()!="TABLE" )
		obj=obj.parentNode;
	//obj ahra es la TABLE sobre la que trabajamos
	function recorrerHijos(elem) {
		if( elem.nodeType==1 && elem.tagName.toUpperCase()=="INPUT" && elem.type=="checkbox" && elem.onclick && /colorea\(/.test(elem.onclick) ) {	// tipo ELEMENT_NODE y encima es checkbox y sirve para colorear
			elem.checked=check;
			// extraemos la funcion que salta al onclick para forzar a ejecutarla (siempre que no sea todosChkDeTabla, entraríamos en recursión)
			var saltaEnOnclick=elem.onclick.toString().match(/^[^\{]+\{([^\}]+)}$/)[1].replace(/this/g,"elem");
			eval(saltaEnOnclick);
		}
		else if (elem.nodeType==1 && elem.hasChildNodes() ) {		//ELEMENT_NODE y encima con hijos
			for(var hijo=0; hijo<elem.childNodes.length; hijo++)		//recorremos cada hijo con la función, recursivamente
				recorrerHijos( elem.childNodes[hijo] );
		}
	}
	recorrerHijos(obj);		//recorremos sus hijos y encontramos checkboxes para marcarlos
}
La estructura HTML es todo lo complicada que se quiera (he anidado varios tipos de tabla). Además he incluído el soporte para checkboxes que no tienen nada que ver con colorear, que antes no tenía esa capacidad la función todosChkDeTabla:
Código PHP:
<table border="1">
    <
tr>
        <
td colspan="3"><input type="checkbox" onclick="todosChkDeTabla(this,this.checked);" /></td>
    </
tr>
    <
tr>
        <
td>
            <
table border="1">
                <
tr>
                    <
td>
                        <
input type="checkbox" onclick="colorea(this,'TR',1);" />
                        <
input type="checkbox" onclick="colorea(this,'TR',2);" />
                    </
td>
                    <
td>AA</td>
                    <
td>BB</td>
                </
tr>
            </
table>
        </
td>
        <
td>loren</td>
        <
td>ipsum</td>
    </
tr>
    <
tr>
        <
td><input type="checkbox" onclick="colorea(this,'TR',1);" /></td>
        <
td>dolor</td>
        <
td>sit</td>
    </
tr>
    <
tr>
        <
td><input type="checkbox" onclick="colorea(this,'TR',1);" /></td>
        <
td>amet</td>
        <
td>loren</td>
    </
tr>
    <
tr>
        <
td><input type="checkbox" onclick="colorea(this,'TR',1);" /></td>
        <
td>
            <
table border="1">
                <
tr>
                    <
td>¿Tienes coche? <input type="checkbox" /></td>
                </
tr>
                <
tr>
                    <
td>¿Moto? <input type="checkbox" /></td>
                </
tr>
                <
tr>
                    <
td>¿Camión? <input type="checkbox" /></td>
                </
tr>
            </
table>
        </
td>
        <
td>dolor</td>
    </
tr>
    <
tr>
        <
td colspan="3">
            <
table border="1">
                <
tr>
                    <
td>Minifila A</td>
                    <
td><input type="checkbox" onclick="colorea(this,'TR',1);" /></td>
                </
tr>
                <
tr>
                    <
td>Minifila B</td>
                    <
td><input type="checkbox" onclick="colorea(this,'TR',1);" /></td>
                </
tr>
                <
tr>
                    <
td>Minifila C</td>
                    <
td><input type="checkbox" onclick="colorea(this,'TR',1);" /></td>
                </
tr>
            </
table>
        </
td>
    </
tr>
</
table
Lo he intentado identar todo muy bien para que no haya confusiones y pueda ser lo más legible posible. He tenido que utilizar los bbcode [ code ] en vez de [ php ] porque utilizo expresiones regulares y las contrabarras se me eliminan si no, lo siento.


La función colorea ahora selecciona el color ella misma, no hace falta pasárselo por argumento (me parece más cómodo). Además busca un padre con la etiqueta tagPadre, pero lo busca tantas veces como niveles. Así si tienemos dos tablas anidadas y desde la de dentro le decimos que coloree "TR" con nivel=2, coloreará el segundo TR que se encuentre haciendo parentNode, es decir, el de la tabla padre. Para "TR" con nivel=1 coloreara la fila de la misma tabla hija.


Para la función todosChkDeTabla lo que he hecho es restringir que se checken todos los checkboxes que en su onclick esté la función colorea; para ello necesito todo el condicional bestia este
Código:
elem.nodeType==1 && elem.tagName.toUpperCase()=="INPUT" && elem.type=="checkbox" && elem.onclick && /colorea\(/.test(elem.onclick)
Aquí ojo que he pensado que si se llama en un onclick a colorea y a todosChkDeTabla a la vez, habría que meter un condicional así para ejecutar el eval:
Código:
if( !/todosChkDeTabla/.test(saltaEnOnclick) )
Pero bueno... son detalles.



Al final me ha gustado mucho cómo me ha quedado el script, pequeño pero matón jeje. Además sirve tanto como para colorear TD como TR como TBODY y TABLE y BODY entero..., lo que se quiera mientras ese elemento sea padre del checkbox



Bueno, ya está bien de parrafada
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
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 02:46.