• Domingo 22 de Diciembre de 2024, 22:50

Autor Tema:  Eliminar tipo hotmail con checks usando mvc y java script..  (Leído 5000 veces)

dquispe

  • Miembro activo
  • **
  • Mensajes: 34
    • Ver Perfil
Eliminar tipo hotmail con checks usando mvc y java script..
« en: Jueves 28 de Enero de 2010, 22:30 »
0
Hola.. haber si me pueden dar una mano.
Mira tengo dos funciones en java script.
En la cual pretendo eliminar mediante check el registro seleccionado.


Pero cuando le doy eliminar pues no m hace nada.

Pero si detecta si eh seleccionado un check o no pareciera que no atrapara el valor.

Mira primero te voy a mostrar como elimino elementos sin utilizar check..

Esta metodo esta hecho en mvc.



controler..

Si encuentro data pues la muestro $lista usuarios.. contiene la data ps esta grabada en una sesion.

if(isset($lista_usuarios[$i]["nomusu"])){ ?>
<td align="center" valign="middle"><div align="center"></div></td>
<tr><td height="32">
<div align="center">
<input type="checkbox" name="checkbox" value="checkbox<?=$codigo?>" id="checkbox<?=$codigo?>" /> //Este es el check aqui pretendo que elimine
</div>
<div class="pintar"> </div></td>
<td align="center" valign="middle">
<span class="tablaDato">
<?=$lista_usuarios[$i]["nomusu"]?>
</span>
<div align="left">
<div align="left"></div></td>
<td class="tablaDato"><?=$lista_usuarios[$i]["apeusu"]?></td>
<td class="tablaDato"><?=$lista_usuarios[$i]["dir_user"]?></td>
<td class="tablaDato"><?=$lista_usuarios[$i]["dni_user"]?></td>
<td class="tablaDato"><?=$lista_usuarios[$i]["tel_user"]?></td>
<td class="tablaDato"><?=$lista_usuarios[$i]["loginusu"]?></td>
<? $codigo=$lista_usuarios[$i]["nomusu"]; ?>

//atrapo el codigo para saber que registro voy a eliminar hago la pregunta confirmacion


<td align="center" valign="middle"><a href="../controler/usuarios_controler.php?accion=del&codi=<?=$lista_u suarios[$i]["nomusu"] ?>" onClick="return confirm('Seguro deseas Eliminar el Registro? <?=$codigo?>')"><img src=../imagenes/b_drop.png" width="16" height="16" alt="Eliminar" border="0" /></a></td>
aqui mando la accion seleccionada como parametro del y el codi que es el codigo que eh elegido.


La funciones de javascript

Esta es para seleccionar todos los check activarlos funciona bien..

<script>
function marcartodo(x) {
if(x==true){
for (i=0;i<frmusuarios.elements.length;i++){
if ((frmusuarios.elements.type=="checkbox")&&(frmusuarios.elements.checked==false)){
frmusuarios.elements.checked=true;
}
}
}
else{
for (i=0;i<frmusuarios.elements.length;i++){
if ((frmusuarios.elements.type=="checkbox")&&(frmusuarios.elements.checked==true)){
frmusuarios.elements.checked=false;
}
}
}
}
</script>


Esta funcion es para eliminar
<script>
function validar_chk() { //por siaca le puse tambien codigo haber si atrapa algo y nada
var f = document.frmusuarios
var chk = false;
var url;
var cod = "";
for (i=0; i < f.checkbox.length; i++) {
if (f.checkbox.checked == true) {
url="../controler/usuarios_controler.php='accion=del&codi=<?=$lista_ usuarios[$i]["nomusu"] ?>"; //Aqui lo reemplaze por codigo pero no atrapa nada
return url;
}
}
if (chk == false) {
alert("No has seleccionado ningun checkbox!!!")
return false
}
return true
}
</script>


usuarios_controler.php



session_start(); //iniciando la sesion jalando el model del usuario como su dto y la utilidades...
require_once "../model/usuario_model.php";
require_once "../dto/usuario_dto.php";
require_once "../utilities/consultas.php";

//Capturando la accion como el codi del registro..
$accion_elegida = $_REQUEST["accion"];
$codigo_atr = $_REQUEST["codi"];



Aqui si la accion el del elimina llamo a delete_usuario que esta en el model....

if ($accion_elegida == "del") {
$model_usuario=new usuario_model();
$model_usuario->delete_usuario($codigo_atr);
$_SESSION["msj"] ="<img src='../imagenes/b_drop.png' />Registro Eliminado Correctamente .";
//El mensaje... lo arroja cuando elimina---
?>
<script LANGUAGE="JavaScript">
var paginax="../view/usuarios.php"
location.href=paginax //aca retorna a usuarios.php

</script>
<?
}
?>


usuario_model.php


session_start(); //iniciamos la sesion
require_once '../dao/usuarios_dao.php'; //jalamos usuario dao

public function delete_usuario($dto){ //una funcion delete_usuario aqui el dto contiene toda la data del registro selecciionado

try {
$usuario_dao=new usuario_dao();

$usuario_dao->delete_usuario($dto);//aqui jalamos el delete usuario que esta en el dao
//$ncodigo
}
catch(Exception $e){ //esto esta con sus repestivos exception
throw $e;
}
}

usuario_dao.php


public function delete_usuario($dto){ //funcion delete usuario el dto contiene los seter y los geters osea toda la data
try{
$imp=factory_dao::get_implementacion($_SESSION["ds"]); //jalamos al factory para ver que tipo de gestor de bs uso en mi caso mysql es el ds
$imp->conectar();
$cad= "delete from usuarios where nomusu='".$dto."'"; //un delete para eliminar el usuario seleccionado...
$imp->execute_update($cad); //execute_update se usa porque es una actualizacion
}
catch(Exception $e)
{
throw $e;
}
}

Esto funciona muy bien .. siempre eh utilizado este metodo, el problema son los check.. hacerlos con checks.

fonsi3

  • Miembro activo
  • **
  • Mensajes: 95
    • Ver Perfil
Re: Eliminar tipo hotmail con checks usando mvc y java script..
« Respuesta #1 en: Viernes 29 de Enero de 2010, 01:29 »
0
Oye amigo, la verdad el codigo no se entiende, puedes pegarlo con formato. Y otra cosa, no me ha quedado claro como eso de los checkboxs. Segun entendi cuando el usuario "checkea" un checkbox, imagino yo que debe haber un boton eliminar que realice esa accion. Eso es lo que quieres hacer??
Cha che chi cho chu buenichimo!
http://mensoscripts.com

Links de interes: HTML | CCS2~CSS* | PHP
Indispensables tools]Firebug[/url] | Web Developer | FireFTP | Live Headers

dquispe

  • Miembro activo
  • **
  • Mensajes: 34
    • Ver Perfil
Re: Eliminar tipo hotmail con checks usando mvc y java script..
« Respuesta #2 en: Viernes 29 de Enero de 2010, 14:22 »
0
Claro mi hermano osea cuando hago clic en el boton eliminar llamo a esas funciones.
Lo que trato de hacer es eliminar tipo hotmail utilizando mvc, modelo vista controlador sin utilizar ningun framework, en el codigo que hice este post logro eliminar los registros pero via una imagen que l darle clic me manda un mensaje si quero eliminar el elemento eso funciona de maravillas.

El detalle es cuando lo quiero eliminar con los check no me dejan me dijieron que use javascript pero no me elimina.

 <input name="btnEliminar" type="button" class="RealBoton" id="btnEliminar" value="Eliminar" onClick="validar_chk()" />

Yo creo que aqui es el problema en lA linea url.

<script>
function validar_chk() { //por siaca le puse tambien codigo haber si atrapa algo y nada
var f = document.frmusuarios
var chk = false;
var url;
var cod = "";
for (i=0; i < f.checkbox.length; i++) {
if (f.checkbox.checked == true) {
url="../controler/usuarios_controler.php='accion=del&codi=<?=$lista_ usuarios[$i]["nomusu"] ?>"; //Aqui lo reemplaze por codigo pero no atrapa nada  //el problema parece ser en lo que contiene esta liea (url)
return url;
}
}
if (chk == false) {
alert("No has seleccionado ningun checkbox!!!")
return false
}
return true
}
</script>

fonsi3

  • Miembro activo
  • **
  • Mensajes: 95
    • Ver Perfil
Re: Eliminar tipo hotmail con checks usando mvc y java script..
« Respuesta #3 en: Viernes 29 de Enero de 2010, 17:58 »
0
<?=$lista_ usuarios[$i]["nomusu"] ?> como sabes que $i esta apuntando a ese checkbox selecionando, ademas personalmente no me gusta como has implementado tu solucion. Si tengo tiempo hare una solucion similar pero lo haria con uso de POST y sin usar objetos.
Cha che chi cho chu buenichimo!
http://mensoscripts.com

Links de interes: HTML | CCS2~CSS* | PHP
Indispensables tools]Firebug[/url] | Web Developer | FireFTP | Live Headers

dquispe

  • Miembro activo
  • **
  • Mensajes: 34
    • Ver Perfil
Re: Eliminar tipo hotmail con checks usando mvc y java script..
« Respuesta #4 en: Viernes 29 de Enero de 2010, 20:34 »
0
Ok tio haber apoyame con ese tema.
Te parecera mi forma fea pero lo cierto es que si funciona con imagen es problema son los check hacerlos asi tipo hotmail usando mvc.

F_Tanori

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: Eliminar tipo hotmail con checks usando mvc y java script..
« Respuesta #5 en: Viernes 29 de Enero de 2010, 22:26 »
0
Cita de: "dquispe"
Claro mi hermano osea cuando hago clic en el boton eliminar llamo a esas funciones.
Lo que trato de hacer es eliminar tipo hotmail utilizando mvc, modelo vista controlador sin utilizar ningun framework

Eso no es muy reelevante que digamos, incluso tengo mis dudas si en verdad estas usando MVC

Tu codigo esta demasiado disperso, ademas resulta muy complicado leerlo

Código: PHP
  1.  
  2. <td align="center" valign="middle"><a href="../controler/usuarios_controler.php?accion=del&codi=<?=$lista_u suarios[$i]["nomusu"] ?>" onClick="return confirm('Seguro deseas Eliminar el Registro? <?=$codigo?>')"><img src=../imagenes/b_drop.png" width="16" height="16" alt="Eliminar" border="0" /></a>
  3.  
  4.  

Cuando haces ese enlace con la imagen que comentas, es para borrar individualmente, y la idea (supongo yo) es que al usar checkbox es para poder hacer eliminaciones multiples

La tabla debera estar dentro de un form, que tenga el submit para procesar la accion (del), y tu archivo usuarios_controler.php debera estar preparado para manejar elementos multiples, ya que recibiras un Arreglo con los valores de los "checks"

Saludos
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================

dquispe

  • Miembro activo
  • **
  • Mensajes: 34
    • Ver Perfil
Re: Eliminar tipo hotmail con checks usando mvc y java script..
« Respuesta #6 en: Lunes 1 de Febrero de 2010, 03:11 »
0
claro tio la idea de utilizar los checks es para eliminar varios a la vez.
Pero no logro hacerlo tu me puedes apoyar, para eliminarlos usando check en mvc.

fonsi3

  • Miembro activo
  • **
  • Mensajes: 95
    • Ver Perfil
Re: Eliminar tipo hotmail con checks usando mvc y java script..
« Respuesta #7 en: Lunes 1 de Febrero de 2010, 07:04 »
0
Aqui he hecho un ejemplo de como eliminar registros mediante el tildado de checkboxes, de una db usando php y mysql nivel 0, osea nada de PDO, solo para que sea mas simple de entender, luego a bunch of javascript code que lo unico que hara es highlightear las rows mediante el evento mouseover, y uso de mouseout obivamente, y click sobre una determinada fila para que quede seleccionada. Ademas un checkbox global que tildara y destilara todas las filas y un boton para deseleccionar filas seleccionadas. Aqui una imagen de lo que vamso a hacer:

i48.tinypic.com/2ep3n2s.png

Ahora bien, el codigo javascript puede ser muy dificil de entender, y mas para alguien que haya aprendido javascript mediate dessarrolloweb y programacionweb. Asi que lo unico que te recomiendo es que te bajes un par de pdfs sobre javascripts recientes, que hablen de W3C Dom, uso de objetos en javascript, bla bla, nada de cosas de andar poniendo codigo javascript en los tags html.

Empezemos creando el markup html de nuestra pagina:

Código: Text
  1. <html>
  2.     <head>
  3.         <script>
  4.         </script>
  5.         <style>
  6.         </style>
  7.     </head>
  8.     <body>
  9.         <table>
  10.             <thead>
  11.                 <th><input id="mainChkBox" type="checkbox" /></th>
  12.                 <!-- este sera el checkbox global que usare para para marcar/desmarcar todos los checkboxes de cada fila -->
  13.                 <th>Id</th>
  14.                 <th>Nombre</th>
  15.                 <th>Apellido</th>
  16.                 <th>DNI</th>
  17.                 <th>Telefono</th>
  18.             </thead>
  19.             <tbody>
  20.         <!-- aqui el form que levantara todos los checkbox presentes en las filas que generare mediante php -->
  21.                 <form method="post" action="6b.php">
  22.         <!-- aqui iria el codigo php que generara las filas -->
  23.             </tbody>
  24.         </table>
  25.                 <!-- este boton lo unico que hara es destildar checkboxes -->
  26.                 <button id="clrSelRows" class="smallBtn">Limpiar seleccionado(s)</button>
  27.                 <input id="deleteBtn"class="smallBtn" name="delete" type="submit" value="Eliminar seleccionado(s)" />
  28.         <!-- aqui el boton submit que enviara los checkbox que utilizare para saber que filas tengo que borrar de la db -->
  29.             </form> <!-- es imporate cerrar aqui el form aunque rompa de alguna manera el mark-up html, para poder levantar los checkboxes -->
  30.     </body>
  31. </html>
  32.  

Ahora un poco de estilo:

Código: CSS
  1.     body {
  2.                 background-color: #014D5D;
  3.             }
  4.             table {
  5.                 background-color: #690000;
  6.                 border: 1px #984202 solid; 
  7.                 border-collapse: collapse;         
  8.             }
  9.             th {
  10.                 border-bottom: 1px orange solid;
  11.                 font: bold 13px Verdana;
  12.                 color: wheat;
  13.                 padding: 5px;              
  14.             }
  15.             td {
  16.                 font: 13px Gautami, Tahoma;
  17.                 color: #fff;
  18.                 padding: 3px;              
  19.             }
  20.             .smallBtn {
  21.                 width: 130px;
  22.                 height: 20px;
  23.                 font: 10px Tahoma;
  24.                 padding-bottom: 2px;   
  25.                 margin: 5px 0 0 0;
  26.             }
  27. /* esta regla es para cuando el mouse hace mouseover sobre una fila */
  28.             .hightLightRow {               
  29.                 background-color: #DC774F;
  30.             }
  31. /* esta regla es para cuando se hace click sobre una fila */
  32. /* es importante respetar este orden, ya que esta regla debe tener mayor prioridad */
  33. /* porque sino se quedaria siempre destras de la highlighteada, you get the idea */
  34.             .clickedRow {              
  35.                 background-color: #E16B1D;
  36.             }
  37.  

Ahora codigo php very simple, lo ponemos arriba de todo, obviamente:

Código: PHP
  1. <?php
  2.     require "connection.php";
  3. // importamos la "connectionString" para acceder a la base de datos
  4.  
  5. //simplemente preguntamos si se ha hecho post mediante el name 'checkbox'
  6.     if (isset($_POST['checkbox'])) {     
  7.         //ahora simplement un foreach, para recorrer los checkboxes uno por uno
  8.         foreach ($_POST['checkbox'] as $value) {
  9.             //aqui creamos nuestro delete command en base al value del checkbox
  10.             //el value no es nada mas que el id a que hace referencia la fila
  11.             $queryDelete = "DELETE FROM usuarios2 WHERE id = '{$value}'";
  12.             $resultDelete = mysql_query($queryDelete, $connection);
  13.             if (!$resultDelete) { echo mysql_error(); }
  14.         }      
  15.     }
  16.    
  17.    //aqui creamos nuestro select command para llenar nuestra table
  18.    //es importante crearlo ultimo para si siempre tener la version
  19.    //mas reciente de nuestra tabla por si hubo algun cambio
  20.     $querySelect = "SELECT * FROM usuarios2 ORDER BY id ASC";
  21.     $resultSelect = mysql_query($querySelect, $connection);
  22.  
  23.     if (!$resultSelect) { echo mysql_error(); }
  24. ?>
  25.  

...y el codigo php que creara el contenido del tbody (las trs), osea que hay pegarlo ahi dentro justo despues del form:

Código: PHP
  1. <?php while($rows = mysql_fetch_assoc($resultSelect)) {
  2. //empezamos a fetchear las filas para crear las <tr>
  3. //esto se denomina heredoc sintaxis, si no la conocias, te estabas perdiendo un mundo
  4. echo <<<TRs
  5.                 <tr class="rows">
  6.                     <td><input type="checkbox" name="checkbox[]" value="{$rows['id']}" /></td>
  7.                     //aqui veran el input que estoy genernando dinamicamente, vean que name tiene que estar
  8.                     //declarado de la siguien manera porque sino siempre tendra el valor del ultimo checkbox
  9.                     //y en value ahi guardamos el id de la fila, para saber que filas hay que eliminar de la db
  10.                     <td>{$rows['id']}</td>
  11.                     <td>{$rows['nombre']}</td>
  12.                     <td>{$rows['apellido']}</td>
  13.                     <td>{$rows['dni']}</td>
  14.                     <td>{$rows['tel']}</td>                
  15.                 </tr>n
  16. TRs;
  17. //se debe cerrar asi si o si, nada de tabs o espacios.
  18. } ?>       
  19.  
   

listo ya podriamos decir que nuestra pagina anda, sin embargo falta la magia, es hora de javascript (seran aprox 200 linas :P):
Todo esto va dentro del tag <script>, obviamente:

Código: Text
  1.             //primero empezemos con algo de browser detection
  2.             //asi nuestro codigo funcionara tanto en mozilla como en IE
  3.             var standar = null;
  4.             if (typeof document.addEventListener != 'undefined') {
  5.                 //aca preguntamos si el navegador soporta W3C DOM (osea todo navegador competente)
  6.                 standar = true;
  7.             } else if (typeof document.attachEvent != 'undefined') {
  8.                 //sino bueno es IE DOM
  9.                 standar = false;
  10.             }
  11.            
  12.             //ahora crearemos un objecto que lo unico que hara es tener un par de
  13.             //variables y funciones para no tener que estar repitiendo codigo
  14.             var GblElems = {
  15.                 init: function() {
  16.                     //aca levantamos todos los inputs (submit, text, checkbox, radios, ect)
  17.                     var allInputs = document.getElementsByTagName("input");
  18.                     //creamos un array que utilizaremos para guardar unicamente
  19.                     //los checkboxes de las filas, excluyendo al checkbox global, el que esta
  20.                     //en el <thead>
  21.                     var chkBoxes = [];
  22.                     for (var i=0,len=allInputs.length;i<len;i++) {
  23.                         if (allInputs[i].type.toLowerCase() == "checkbox" && allInputs[i].id != "mainChkBox") {
  24.                         //aqui preguntamos si es de tipo checkbox, hacemos lowercase por las dudas
  25.                         //y preguntamos si NO ES el checkbox que esta en el <thead>
  26.                             chkBoxes[chkBoxes.length] = allInputs[i];
  27.                         }
  28.                     }
  29.                     //aca guardamos una referencia de todos estos checkbox y los guardamos en el document object
  30.                     //como propiedad, para acceder en cualquier momneto
  31.                     document._chkBoxes = chkBoxes;
  32.                     allTrTags = chkBoxes = null; //como ya cumplieron su cometido, no es necesario que sigan ocupando memoria
  33.                    
  34.                     //ahora vamos a buscar las tr que esten el tbody
  35.                     //esto parecera medio estupido ya que tr y thead ya de por si
  36.                     //no son los misomo, pero IE no piensa lo mismo
  37.                     //asi que para no agarrar esa tr, que en realidad es una thead
  38.                    //hay que empezar discriminar los trs...
  39.                     var allTrTags = document.getElementsByTagName("tr");
  40.                     var trsClassRows = [];                 
  41.                     for (var i=0,len=allTrTags.length;i<len;i++) {
  42.                         //... si se fijan en nuestro markup html todas las trs que estan
  43.                         //tbody tiene la clase rows, asi que solo tenemos que preguntar
  44.                         //si tal tr tiene tal clase, y ya sabemos que es una tr que esta en tbody
  45.                         if (allTrTags[i].className.toLowerCase() == "rows") {
  46.                             trsClassRows[trsClassRows.length] = allTrTags[i];
  47.                         }
  48.                     }
  49.                     //como hicimos anteriormente guardamos una referencia en el document,
  50.                     //para haceder a estas trs en cualquer momento
  51.                     document._trsClassRows = trsClassRows;
  52.                     allTrTags = trsClassRows = null;
  53.                 },
  54.                
  55.                 //ahora es tiempo de funciones
  56.                 //esta funcion lo que hace es buscar si un elemento
  57.                 //tiene como padre a un tr en este caso, porque es esto?
  58.                 //bien debido a que IE maneja de diferente manera
  59.                 //los eventos (que explico un toque mas abajo),
  60.                 //tenemos que hacer esto, ya entederan porque
  61.                 searchParent: function(node, parent) {
  62.                     //osea para que entiendan a aca va a entrar
  63.                     //un <td> y un parent a buscar que va a se "tr"
  64.                     //una vez que lo que encontramos ya sabemos que <tr>
  65.                     //tenemos que highlightear, selectear y/o viceversa
  66.                     var test = node.parentNode;
  67.                     while (test) {
  68.                         if (test.nodeName.toLowerCase() == parent) {                       
  69.                             return test;
  70.                         }
  71.                         test = test.parentNode;
  72.                     }
  73.                     return null;
  74.                 },
  75.                
  76.                 searchSelectiveParent: function(node, parent) {
  77.                     //entra node = input (string),
  78.                     //entra parent = tr (node)
  79.                     //y devuelvo ese input vinculado a ese tr
  80.                     var allNodes = document.getElementsByTagName(node);                
  81.                     for (var i=0,len=allNodes.length;i<len;i++) {
  82.                           var test = allNodes[i].parentNode;
  83.                           while (test) {
  84.                              if (test == parent) {
  85.                                        return allNodes[i];
  86.                              } 
  87.                            test = test.parentNode;
  88.                           }                
  89.                     }
  90.                     return null;               
  91.                 },
  92.  
  93.                 //esta funcion se fija si estan todos los checkboxes
  94.                 //tildados si es asi entonces nuestro checkbox principal
  95.                 //deberia tildarse, o viceversa
  96.                 checkChecked: function() {
  97.                     //aca levantamos todos los checkboxes
  98.                     //para saber cuantos hay tildados
  99.                     var checkChkBoxes = document._chkBoxes;
  100.                     var countChecked = 0;
  101.                     for (var i=0,len=checkChkBoxes.length;i<len;i++) {
  102.                         if (checkChkBoxes[i].checked == true) {
  103.                               countChecked++; //vamos contando la cantidad de tildados
  104.                               if (len === countChecked) {
  105.                                    SelAllChkBoxes.mainChkBox.checked = true;
  106.                               }
  107.                          } else {                       
  108.                             SelAllChkBoxes.mainChkBox.checked = false;
  109.                             break;
  110.                          }
  111.                     }
  112.                     //aca esta el truco si la cantidad de tildados es igual
  113.                     //a la cantidad de checkbox entonces nuestros checkbox global
  114.                     //deberia estar tildado, sino entonces tiene que estar destildado
  115.            
  116.                     checkChkBoxes = null;  //limpiamos memoria
  117.                 }
  118.             };
  119.        
  120.             //ahora empezemos con el objecto que se encargara de tildar/detildar todos los input
  121.             //de una saque, osea me refiero al checkbox que esta en <thead>
  122.             var SelAllChkBoxes = {
  123.                 init: function() {
  124.                     //aca creo una propiedad publica que utlizare luego para saber
  125.                     //si esta checked o no lo esta
  126.                     SelAllChkBoxes.mainChkBox = document.getElementById("mainChkBox");
  127.  
  128.                     //se acuerdan de mi variable standar, la que reconocia si era mozilla o ie,
  129.                     //pues como ambos manejan de diferente manera los eventos, pregunto que onda,
  130.                     //y asi se como debo declarar mi eventListener en mi elemento
  131.                     if (standar) { SelAllChkBoxes.mainChkBox.addEventListener("click", SelAllChkBoxes.clickListener, false); } //W3C DOM
  132.                     else { SelAllChkBoxes.mainChkBox.attachEvent("onclick", SelAllChkBoxes.clickListener); } //IE DOM
  133.                 },
  134.                
  135.                 clickListener: function(evt) {                 
  136.                     //aqui mediante la propiedad publica que declare arriba, que no es mas que una variable
  137.                     //veo si el checkbox que esta en <thead> esta selecionado o no lo esta
  138.                     var checked = (SelAllChkBoxes.mainChkBox.checked == true) ? true : false;
  139.                     //se acuerdan de mi referencia a los checkbox que cree mas arriba en GblElems ??,
  140.                     //bueno aqui me la guardo en la variable chkBoxInputs y empiezo...
  141.                     var chkBoxInputs = document._chkBoxes;                 
  142.                     for (var i=0,len=chkBoxInputs.length;i<len;i++) {
  143.                         if (checked) {
  144.                             //... si el checkbox global esta tildado lo que debo hacer
  145.                             //es tildartodos los checkbox que estan en <tbody> y poner
  146.                             //todos los <tr> con la .class "clickedRow"
  147.                            
  148.                             //primero uso la funcion que cree en GblElems
  149.                             //que buscamos si tal elemento tiene tal parent
  150.                             var trTag = GblElems.searchParent(chkBoxInputs[i], "tr");
  151.                             //una vez encontrado ese <tr> guardo por las dudas cualquier
  152.                             //classname que tenga o sino no,
  153.                             var curClass = trTag.className || "";
  154.                             //ahora aplico la clase "clickedRow" + si es que habia otra case anteriormente
  155.                             //es importante que haya un espacio " clickedRow" sino romperemos todo =P
  156.                             trTag.className = curClass + " clickedRow";
  157.                             //ahora el input de este <tr> lo ponemos en true y listo
  158.                             chkBoxInputs[i].checked = true;    
  159.                         } else {
  160.                        
  161.                             //aca hacemos el proceso inverso,
  162.                             //buscamos el <tr> de este <input>, obviamente
  163.                             var trTag = GblElems.searchParent(chkBoxInputs[i], "tr");
  164.                             //ya encontrado borramos la clase "clickedRow" mediante el uso de
  165.                             //una expresion regular, con el metodo replace
  166.                             trTag.className = trTag.className.replace(/ clickedRow/g, "");
  167.                             //destildamos el checkbox
  168.                             chkBoxInputs[i].checked = false;
  169.                         }
  170.                     }
  171.                    
  172.                     //esto es para que el evento click no suba (bubble up), sino sabes a lo que me refiero
  173.                     //estas en serios en problemas =P, pero basicamente es que no quero
  174.                     //que este click relacionado con este elemento no se me confunda
  175.                     //con otro elemento que tambien tenga un evento click relacionado, obivamente en IE es diferente,
  176.                     //pero para hicimos nuestro browser detection
  177.                     if (standar) { evt.stopPropagation(); } else { evt.cancelBubble = true; }
  178.                
  179.                 }
  180.             };
  181.            
  182.             //este objecto sera el encargado de que cuando hagamos mouseover y mouseout,
  183.             //las filas cambien su backgroundColor, ademas click para cuando clickeemos
  184.             //sobre una determinada fila y quede seleccionada o viceversa
  185.             var HighLightRows = {
  186.                 init: function() {
  187.                     //aqui traemos la referencia de los trs que estan en <tbody>
  188.                     var trsClassRows = document._trsClassRows;                 
  189.                     for (var i=0,len=trsClassRows.length;i<len;i++) { //empezaremos agregando los respectivos eventos
  190.                         if (standar) {
  191.                             //esto es para W3C DOM
  192.                             trsClassRows[i].addEventListener("mouseover", HighLightRows.mouseoverListener, false);
  193.                             trsClassRows[i].addEventListener("mouseout", HighLightRows.mouseoutListener, false);
  194.                             trsClassRows[i].addEventListener("click", HighLightRows.clickListener, false);
  195.                         } else {
  196.                             //esto es para IE DOM
  197.                             trsClassRows[i].attachEvent("onmouseover", HighLightRows.mouseoverListener);
  198.                             trsClassRows[i].attachEvent("onmouseout", HighLightRows.mouseoutListener);
  199.                             trsClassRows[i].attachEvent("onclick", HighLightRows.clickListener);
  200.                         }
  201.                     }
  202.                    
  203.                     //ahora traigo la referencia a los checkbox que esta en <tbody>
  204.                     //para agregarles los respectivos eventos
  205.                     var chkBoxes = document._chkBoxes;
  206.                     for (var i=0,len=chkBoxes.length;i<len;i++) {                      
  207.                         if (standar) { chkBoxes[i].addEventListener("click", HighLightRows.clickListener2, false); } //W3C
  208.                         else { chkBoxes[i].attachEvent("onclick", HighLightRows.clickListener2); } //IE
  209.                        
  210.                     }
  211.  
  212.                    trsClassRows = chkBoxes = null;
  213.                    
  214.                 },
  215.                
  216.                 //algo simple cuando el mouse este sobre un fila, esta highlightee             
  217.                 mouseoverListener: function(evt) {
  218.                     var target = evt.target || evt.srcElement; 
  219.                     //hacer esto es super estupido, basicamente porque tranquilamente
  220.                     //podira usar this, pero this en IE apunta pa cualquier lado,
  221.                     //y tendria que agregar un par de lineas de codigo para que this
  222.                     //apunte al <tr> pero pa que te voy a complicar la vida...
  223.                    
  224.                     //basicamente lo que hago es guardar en target, el elemento
  225.                     //donde estoy haciendo mouseover, que puede ser un <td>
  226.                     //o el <input>, srcElement es para IE, el otro es para Mozilla
  227.                    
  228.                     //pero como nostros debemos highlightear el tr y no el td o el input
  229.                     //tenemos que encontrarlo, para eso uso mi funcion buscar parent
  230.                     var target = GblElems.searchParent(target, "tr");
  231.  
  232.                     //este if lo unico que hace es ver si ya previamente la fila
  233.                     //a la que le hacemos mouseover esta clickeada (.clickedRow)
  234.                     //si es asi, no es necesaria highlightearla y salimos, y al hacer este
  235.                     //procesdimiento nuestro codigo sera mas eficiente.
  236.                     if (/ clickedRow/.test(target.className)) {
  237.             return;
  238.                     }
  239.  
  240.  
  241.                     var curClass = target.className || ''; //guardo si es que tiene una clase previa por la dudas
  242.                     target.className = curClass + " hightLightRow"; //aplico mi .class "hightLightRow",
  243.                     //importante dejar un espacio
  244.                 },
  245.                
  246.                 //este hace el inverso que el anterior, al hacer mouseout
  247.                 //debemos quitar nuestra clase hightLightRow, nada
  248.                 //de otro mundo el codigo
  249.                 mouseoutListener: function(evt) {
  250.                     var target = evt.target || evt.srcElement;                 
  251.                     var target = GblElems.searchParent(target, "tr");
  252.                     target.className = target.className.replace(" hightLightRow", "");
  253.                 },
  254.                
  255.                 //esta funcion sera la que usaremos para aplicar
  256.                 //nuestra clase .clickedRow cuando hacemos
  257.                 //click en una fila, y ademas tildar su respectivo input,
  258.                 //o hacer el proceso inverso
  259.                 clickListener: function(evt) {
  260.                    var target = evt.target || evt.srcElement;
  261.                    
  262.                    //aca buscamos al <tr> de esta fila donde se esta haciendo click
  263.                     var target = GblElems.searchParent(target, "tr");
  264.  
  265.                    var chkBox = GblElems.searchSelectiveParent("input", target);
  266.                    chkBox.checked = (chkBox.checked == false) ? true : false;
  267.                    //una vez encontrado hay que ver si esta seleccionado o no lo esta
  268.                    //para saber si hay que destilar o tildar tal input
  269.  
  270.                     if (/ clickedRow/.test(target.className)) {
  271.                         //aca preguntamos si tiene la clase clickedRow mediante una
  272.                         //expresion regular con el metodo test, porque de este modo sabremos que tenemos
  273.                         //que desclickear dicho tr, y simplemente lo hacemos,
  274.                         //borrando tal clase
  275.                         target.className = target.className.replace(/ clickedRow/g, "");
  276.                     } else {
  277.                         //sino tiene dicha clase, entonces hay que agregarsela,
  278.                         //nada de otro mundo.
  279.                         var curClass = target.className || "";
  280.                         target.className = curClass + " clickedRow";
  281.                     }
  282.                   
  283.                     //se acuerdan de esta funcion, lo que hace
  284.                     //es contar si la cantidad de tildados es igual
  285.                     //a la cantidad de checkbox, si es asi,
  286.                     //nuestro checkbox global deberia tildarse
  287.                     GblElems.checkChecked();
  288.  
  289.                     //para evitar el bubbling-up
  290.                     if (standar) { evt.stopPropagation(); } else { evt.cancelBubble = true; }
  291.                 },
  292.  
  293.                 //esta funcion es la que se encargar de hacer lo mismo que la funcion
  294.                 //de arriba, pero aqui es cuando hacemos click en el input y no en una celda
  295.                 clickListener2: function(evt) {
  296.                     SelAllChkBoxes.mainChkBox.checked = false;
  297.                    
  298.                     //fijense que no pregunto si tiene de child un input
  299.                     //porque ya estoy en ese input, solo tengo que encontrar
  300.                     //el parent <tr> para aplicarle la clase o viceversa
  301.                     var target = evt.target || evt.srcElement;
  302.                     var target = GblElems.searchParent(target, "tr");
  303.                     if (/ clickedRow/.test(target.className)) {
  304.                         target.className = target.className.replace(/ clickedRow/g, "");
  305.                     } else {                       
  306.                         var curClass = target.className || "";
  307.                         target.className = curClass + " clickedRow";
  308.                     }
  309.                  
  310.                     GblElems.checkChecked();
  311.                     if (standar) { evt.stopPropagation(); } else { evt.cancelBubble = true; }
  312.                 }      
  313.             };
  314.            
  315.             //ya estamos eh....
  316.             //este objecto e encarga de unicmanete desseleccionar
  317.             //filas con la clase "clickedRow", para eso usamos el boton con id "clrSelRows" con accionario
  318.             var ClrSelRows = {
  319.                 init: function() {
  320.                     var btnClr = document.getElementById("clrSelRows"); //lo encontramos
  321.                     //y le agregamos el evento click segun W3C o IE
  322.                     if (standar) { btnClr.addEventListener("click", ClrSelRows.clickListener, false); }
  323.                     else { btnClr.attachEvent("onclick", ClrSelRows.clickListener); }
  324.                 },
  325.                
  326.                 //ahora simplemente la funcion que se encargara de quitar
  327.                 //la clase clickeRow
  328.                 clickListener: function(evt) {
  329.                     //primero llamamos a nuestra referencia en document
  330.                     //de nuestros checkboxes que estan en el <tbody>
  331.                     var chkBoxes = document._chkBoxes;
  332.                     for (var i=0,len=chkBoxes.length;i<len;i++) {
  333.                         //solo debemos descelecionar los checkboxes que esten
  334.                         //true, obvious capitan obvious
  335.                         if (chkBoxes[i].checked == true) {
  336.                             chkBoxes[i].checked = false; //destildamos
  337.                             var trParent = GblElems.searchParent(chkBoxes[i], "tr"); //buscamo <tr> de dicho <input>
  338.                             trParent.className = trParent.className.replace(/ clickedRow/g, ""); //quitamos la clase
  339.                         }
  340.                     }
  341.                     //obivamente al estar desleccionando checkboxes,
  342.                     //nuestro checkbox global, no deberia estar tildado
  343.                     SelAllChkBoxes.mainChkBox.checked = false;                 
  344.                    
  345.                     //esto es para evitar el bubbling, y tambien
  346.                     //para que el navegador NO siga el boton, a que me refiero?
  347.                     //pues como nuestro boton esta dentro de un form
  348.                     //al hacerle click recargaria la pagina,
  349.                     //con js podemos hacer que estas accionaes predeterminadas
  350.                     //no sucedan. Obviamente hay una para W3C browses based y otra para IE.
  351.                     if (standar) {
  352.                         evt.stopPropagation();
  353.                         evt.preventDefault();
  354.                     } else {
  355.                         evt.cancelBubble = true;
  356.                         evt.returnValue = false;
  357.                     }
  358.                 }      
  359.             };
  360.            
  361.             //listooooooo, siemplemtente tenemos que llamar
  362.             //a todos nuestros objectos cuando el documento se termine de bajar
  363.             //ya que manipulan el DOM, ya que por el contrario tendriamos errores
  364.             //de todos los colores
  365.             window.onload = function() {
  366.                 GblElems.init();
  367.                 SelAllChkBoxes.init();
  368.                 HighLightRows.init();
  369.                 ClrSelRows.init();
  370.             };
  371.  

Bueno esto es todo por hoy, y espero que les haya gustado. (re a lo nivel-x =P)
Cha che chi cho chu buenichimo!
http://mensoscripts.com

Links de interes: HTML | CCS2~CSS* | PHP
Indispensables tools]Firebug[/url] | Web Developer | FireFTP | Live Headers