Ver Mensaje Individual
  #5 (permalink)  
Antiguo 24/11/2012, 08:04
gebremswar
 
Fecha de Ingreso: enero-2012
Ubicación: Santiago de Surco, Lima - Perú
Mensajes: 266
Antigüedad: 12 años, 10 meses
Puntos: 57
Respuesta: Iluminar y marcar celda al pasar con el raton en una tabla.

Hola nuevamente satjaen.

Cita:
Iniciado por satjaen Ver Mensaje
@gebremswar, no me sale ....
En realidad ya lo sabía . Si probaste el ejemplo de mi mensaje anterior con contenido estático podrás darte cuenta que funciona perfectamente, pero el detalle está en ..........

Cita:
Iniciado por satjaen Ver Mensaje
(...) no se si puede ser por el contenido dinámico:
Así es, lo ocasiona el contenido dinámico. Y esto es porque los elementos con clase ".row" aun no están presentes cuando el "ready" de jquery se ejecutó y comprobó que el DOM ha sido cargado y puede ser manipulado.

Es entonces que debemos definir selectores a partir de los presentes en el contenido estático. Por ejemplo podemos hacer referencia al body ya que sabes que esta presente en el contenido estático y partir de allí definir los descendientes que dispararán el evento.

Pero para este ejemplo que compartiré, no hace falta ir tan "arriba" en busca del padre que estará presente como es el caso de <body>. Ya que podemos definir un id en la tabla y a partir de el crearemos nuestro selector.

Código Javascript:
Ver original
  1. <!doctype html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>@GBreagan</title>
  6. <script src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
  7. <script>
  8. $(document).on('ready', function(){
  9.     $('#list').on('click', '.row', function(){
  10.         var $checkbox = $(this).find('.check');
  11.         if ($checkbox.prop('checked')) {
  12.             $checkbox.prop('checked', false);
  13.             $(this).removeClass('selected')
  14.         } else {
  15.             $checkbox.prop('checked', true);
  16.             $(this).addClass('selected')
  17.         }
  18.     });
  19.     $('#list').on('click', '.row .check', function(event){
  20.         event.stopPropagation();
  21.         $(this).parents('.row').toggleClass('selected');
  22.     });
  23.     //Esto solo es de ejemplo para agregar contenido dinámico
  24.     $('#add').on('click', function(){
  25.         $('#list tbody').append('<tr class="row"><td><input type="checkbox" class="check"></td><td>fdw</td></tr>');
  26.     });
  27. });
  28. </script>
  29. <style>
  30. table {border-collapse:collapse;border-spacing:0}
  31. th, td {border:1px solid black;cursor:default}
  32. .row:hover {background-color:#E7E7E7}
  33. .row.selected {background-color:#0072C6;color:white}
  34. </style>
  35. </head>
  36. <body>
  37. <input type="button" value="add row" id="add">
  38. <table id="list">
  39.   <thead>
  40.     <tr>
  41.       <th>*</td>
  42.       <th>Name</td>
  43.     </tr>
  44.   </thead>
  45.   <tbody>
  46.     <tr class="row">
  47.       <td><input type="checkbox" class="check"></td>
  48.       <td>gebremswar</td>
  49.     </tr>
  50.     <tr class="row">
  51.       <td><input type="checkbox" class="check"></td>
  52.       <td>satjaen</td>
  53.     </tr>
  54.   </tbody>
  55. </table>
  56. </body>
  57. </html>
Como puedes observar el cambio es mínimo (bueno, eliminé también los eventos mouseenter y mouseleave por lo que te comenté en el mensaje anterior).

En el ejemplo se puede apreciar como se asocia el selector dentro del propio cuerpo de la función para especificar el desentiende que disparará el evento. Para nuestro caso la clase .row a partir de su padre #list. Y para el checkbox ".row .check".

<!-- edit-->
Casi lo olvido. Es posible que en otros lugares (foros o blog's) encuentres solución al pequeño inconveniente descrito en este mensaje, referente al contenido dinámico, tratado con el método .live() de JQuery. Y es por eso que te dejo un articulo el cual recomienda no utilizarlo: Porqué no debemos usar nunca jQuery Live
<!--/edit-->

Cita:
Iniciado por satjaen Ver Mensaje
Gracias
De nada

Última edición por gebremswar; 24/11/2012 a las 08:21