Foros del Web » Programando para Internet » Jquery »

[SOLUCIONADO] .click no funciona con tabla generada Dinámicamente

Estas en el tema de .click no funciona con tabla generada Dinámicamente en el foro de Jquery en Foros del Web. Hola amigos buen dia, les escribo por que estoy atorada con algo, tengo dos campos de busqueda, lo que hago es cuando encuentra resultado (1 ...
  #1 (permalink)  
Antiguo 05/02/2013, 13:38
 
Fecha de Ingreso: agosto-2012
Ubicación: México
Mensajes: 106
Antigüedad: 11 años, 8 meses
Puntos: 6
Pregunta .click no funciona con tabla generada Dinámicamente

Hola amigos buen dia, les escribo por que estoy atorada con algo, tengo dos campos de busqueda, lo que hago es cuando encuentra resultado (1 o muchos) los pinta en un div que esta "oculto", utilizo jquery (.ajax) y php, para buscar en bdd los resultados y enviarlos de vuelta a jquery, el detalle que tengo es que, a esos resultados que obtengo, los formateo para que se muestren en forma de tabla, y lo que quiero, pero no lo logro, es que cuando le den clic a cada elmento de la lista que encontro me envie un alert. Pero simplemente no funciona, copie todo ese codigo HTML que me genera el php y lo coloco solito en otra pagina y me funciona, el detalle es que cuando hago que se genere diamicamente dicha tabla, no quiere funcionar el js. Les comparto mi codigo.

Código Javascript:
Ver original
  1. ///////////////////////////FUNCION PARA VALIDAR Y BUSCAR LAS VENTAS HECHAS////////////////////////////
  2. $("#consultar").click(function()
  3.     {
  4.     if($("#telefono").val().length < 1&$("#folio").val().length < 1){
  5.         alert ("No pueden estar vacios los dos campos, introduzca un criterio para la busqueda");
  6.         }else {
  7.             $.ajax({
  8.             type: "POST",
  9.             url:'consultasGerente.php',
  10.             data:{
  11.                 bandera:"yes",
  12.                 linea:$('#telefono').val(),
  13.                 folio:$('#folio').val()
  14.                 },
  15.             success: function(data){
  16.                 $("#msgbox4").fadeTo(200,0.1,function()
  17.                     {
  18.                     $(this).html('Buscando...').fadeTo(900,1,
  19.                         function(){
  20.                             var folio = data;
  21.                             $("#listado").fadeTo(200,0.1,function() //start fading the messagebox
  22.                                                         { //add message and change the class of the box and start fading
  23.                                                           $("#listado").html(data).fadeTo(900,1);;
  24.                                                         });
  25.                             //$("#listado").html(folio);
  26.                             $(this).html('Busqueda Terminada...').fadeTo(900,1);
  27.                            
  28.                         });
  29.                     });//END msjbox4
  30.                
  31.                
  32.             },
  33.             error:function(){
  34.                 alert('error');
  35.             }        
  36.          });//end ajax
  37.            
  38.         }
  39.        
  40.     });//end consultar
  41. ///////////////////////////FUNCION PARA MOSTRAR LOS DATOS DE LAS VENTAS////////////////////////////
  42. /* ESTA ES LA QUE NO ME FUNCIONA*/
  43. $(".folios").click(function()
  44.     {
  45.         var folioSelected = $(this).html();
  46.         alert (folioSelected);
  47.        
  48.        });//end consultar


Aqui el PHP que busca en BDD y envia los resulados ya formateados en HTML(tablas)
Código PHP:
Ver original
  1. function consultar_datos($linea,$folio){
  2.                 //echo $linea." y ".$folio;
  3.                 include "conexionMysqli.php";
  4.                 $linea = $mysqli->real_escape_string($linea);
  5.                 $folio = $mysqli->real_escape_string($folio);
  6.                 $query="SELECT folio_intel as folio, date(fecha_venta) as fecha_venta
  7.                        FROM ventas
  8.                        WHERE telefono='$linea' OR folio_intel='$folio'";
  9.         $result = $mysqli->query($query) or die($mysqli->error.__LINE__);
  10.                 if($result->num_rows > 0) {
  11.                    $tabla = "<table border='1'><tr><th  class='B_Titulos'>Folio</th><th  class='B_Titulos'>Fecha</th></tr>";
  12.                    while ($row = $result->fetch_assoc()){ //para varios resultados
  13.                 //OBTENIENDO Y ORDENANDO LOS DATOS...
  14.                                 $folio=$row['folio'];
  15.                                 $fVenta=$row['fecha_venta'];
  16.                                 $tabla .= "<tr><td ><div class='folios'>".$folio."</div></td>";
  17.                                 $tabla .= '<td>'.$fVenta.'</td></tr>';
  18.                                 }
  19.                                     $tabla .= '</table>';
  20.                                     echo $tabla;
  21.                 }else {
  22.             echo 'No hay resultados con esos datos';   
  23.         }
  24.             }//end consultar_datos

y este es mi HTML
Código HTML:
Ver original
  1. <table width="300" border="1" cellpadding="3">
  2.            <tr>
  3.              <th colspan="2" align="center" class="B_Titulos">Buscar Linea Telmex</th>
  4.             </tr>
  5.              <tr>
  6.              <td align="center"><label for="telefono">No. Telefonico:</label></td>
  7.              <td align="center"><input onkeypress="return validarNum(event)" id="telefono" name="telefono" type="text" size="25" maxlength="10" placeholder="Maximo 10 digitos" /></td>
  8.              </tr>
  9.              <tr>
  10.                <td align="center"><label for="telefono">No. de Folio:</label></td>
  11.                <td align="center"><input onkeypress="return validarNum(event)" id="folio" name="folio" type="text" size="25" maxlength="20" placeholder="Maximo 20 digitos" /></td>
  12.             </tr>
  13.              <tr>
  14.              <td colspan="2"><label for="consultar"></label>
  15.              <div id="consultar"></div>
  16.              </td>
  17.              </tr>
  18.              <tr>
  19.                <td colspan="2"><span id="msgbox4" class="mensajes" style="display:none"></span></td>
  20.              </tr>
  21.           </table><!-- TERMINA TABLE-->
  22.         </form></td>
  23.         </tr>
  24.       <tr>
  25.         <td height="35" colspan="2">&nbsp;</td>
  26.         </tr>
  27.       <tr>
  28.         <td><div id="listado" style="display:none"><!-- AQUI SE MOSTRARAN LOS RESULTADOS--></div></td>
  29.          </tr>
  30.     </table>

Existe algun por que de que no quiera funcionar el $(".folios").click(function()

Como les comente, si lo hago estatico si me funciona, aqui esta el ejemplo de los resultados que me arroja el PHP pero aqui lo hago "estatico":
Código HTML:
Ver original
  1. <html xmlns="http://www.w3.org/1999/xhtml">
  2. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  3. <title>probar clase</title>
  4. <script src="js/jquery-1.8.2.min.js" type="text/javascript" ></script>
  5. <script type="text/javascript" language="javascript">
  6. $(document).ready(function()
  7. {
  8.     $(".folios").click(function()
  9.     {
  10.         var folioSelected = $(this).html();
  11.         alert (folioSelected);
  12.        
  13.        });
  14.  });
  15. </head>
  16. <table border="1">
  17.     <tbody><tr><th class="B_Titulos">Folio</th>
  18.         <th class="B_Titulos">Fecha</th></tr>
  19.             <tr><td><div class="folios">13020113044900020420</div></td>
  20.             <td>2013-02-01</td></tr>
  21.         <tr><td><div class="folios">13020113050300020420</div></td>
  22.             <td>2013-02-01</td></tr>
  23.         <tr><td><div class="folios">13020113051800020420</div></td>
  24.             <td>2013-02-01</td></tr>
  25.     </tbody>
  26. </body>
  27. </html>

Muchas gracias por su ayuda. Saludos!
  #2 (permalink)  
Antiguo 05/02/2013, 14:34
 
Fecha de Ingreso: junio-2008
Ubicación: Colombia
Mensajes: 207
Antigüedad: 15 años, 10 meses
Puntos: 12
Respuesta: .click no funciona con tabla generada Dinámicamente

Esta respuesta la di en otro thread

Cita:
Iniciado por Rosencrantz Ver Mensaje
Usa livequery cuando los elementos generados dinamicamente no responden a ningun evento en particular (click, change, hover...), usa on cuando no sea el caso.
Los elementos dinamicos en js aparecen "muertos" a diferencia del CSS en el cual generas y los estilos se aplican normalmente, jquery dispone de algunos medio para "revivir" esos elementos como on.(recomendado 1.8>), delegate., live. (deprecated) o el plugin livequery.

http://docs.jquery.com/Plugins/livequery

Ejemplo (cargar livequery)

Código PHP:
$('.birthDate').livequery(function(){
  $(
this).datepicker();
  return 
false;
}); 
Para tu caso usa algo como:

Código PHP:
$('#listado').on('click','div.folios',function(){
 
alert('Bazzinga');
 
// do more
}); 
Sobre el on.
http://api.jquery.com/on/

Saludos.
  #3 (permalink)  
Antiguo 05/02/2013, 15:23
 
Fecha de Ingreso: agosto-2012
Ubicación: México
Mensajes: 106
Antigüedad: 11 años, 8 meses
Puntos: 6
Respuesta: .click no funciona con tabla generada Dinámicamente

Cita:
Iniciado por Rosencrantz Ver Mensaje
Esta respuesta la di en otro thread



Para tu caso usa algo como:

Código PHP:
$('#listado').on('click','div.folios',function(){
 
alert('Bazzinga');
 
// do more
}); 
Sobre el on.
http://api.jquery.com/on/

Saludos.
Hola amigo, lo intente pero no me funciona, me arroja el Firebug este error:

Error: TypeError: $(...).on is not a function
  #4 (permalink)  
Antiguo 05/02/2013, 15:38
 
Fecha de Ingreso: junio-2008
Ubicación: Colombia
Mensajes: 207
Antigüedad: 15 años, 10 meses
Puntos: 12
Respuesta: .click no funciona con tabla generada Dinámicamente

que version del jquery tienes? creo que el on se implemento desde la 1.8, asi que podrias usar el delegate que funciona exactamente igual

Código PHP:
$('#listado').delegate('click','div.folios',function(){ 
 
alert('Bazzinga'); 
 
// do more 
}); 
  #5 (permalink)  
Antiguo 05/02/2013, 15:38
 
Fecha de Ingreso: agosto-2012
Ubicación: México
Mensajes: 106
Antigüedad: 11 años, 8 meses
Puntos: 6
Respuesta: .click no funciona con tabla generada Dinámicamente

Cita:
Iniciado por Rosencrantz Ver Mensaje
que version del jquery tienes? creo que el on se implemento desde la 1.8, asi que podrias usar el delegate que funciona exactamente igual

Código PHP:
$('#listado').delegate('click','div.folios',function(){ 
 
alert('Bazzinga'); 
 
// do more 
}); 
Bueno ese es el detalle, que estoy trabjando con jquery 1.4.2.0....alguna alternativa sin que tenga que cambiar la version de jquery?

Ya intente el delegate, y no me envia ese error, pero simplemente no hace nada... no se como podria solucionarlo.

Última edición por art_rockerd; 05/02/2013 a las 15:41 Razón: agregar info.
  #6 (permalink)  
Antiguo 05/02/2013, 15:49
 
Fecha de Ingreso: junio-2008
Ubicación: Colombia
Mensajes: 207
Antigüedad: 15 años, 10 meses
Puntos: 12
Respuesta: .click no funciona con tabla generada Dinámicamente

Cita:
Iniciado por art_rockerd Ver Mensaje
Bueno ese es el detalle, que estoy trabjando con jquery 1.4.2.0....alguna alternativa sin que tenga que cambiar la version de jquery?

Ya intente el delegate, y no me envia ese error, pero simplemente no hace nada... no se como podria solucionarlo.
Creo que cometi un ligero error no es exactamente igual

Código PHP:
$('#listado').delegate('div.folios''click', function(){ 
 
alert('Bazzinga'); 
 
// do more 
}); 
Aqui el ejemplo funcionando dale run y das click en los td's
http://jsfiddle.net/Xr7ut/
  #7 (permalink)  
Antiguo 05/02/2013, 15:56
 
Fecha de Ingreso: agosto-2012
Ubicación: México
Mensajes: 106
Antigüedad: 11 años, 8 meses
Puntos: 6
Respuesta: .click no funciona con tabla generada Dinámicamente

Cita:
Iniciado por Rosencrantz Ver Mensaje
Creo que cometi un ligero error no es exactamente igual

Código PHP:
$('#listado').delegate('div.folios''click', function(){ 
 
alert('Bazzinga'); 
 
// do more 
}); 
Aqui el ejemplo funcionando dale run y das click en los td's
http://jsfiddle.net/Xr7ut/
Pefecto ya quedo funcionando ahora solo le hago las modificacones que necesito para leer el contenido de cada div que es el que utilizare para hacer otras consultas en mi base de datos ! Muchas gracias.

Me queda algo asi..
Código Javascript:
Ver original
  1. ///////////////////////////FUNCION PARA MOSTRAR LOS DATOS DE LAS VENTAS////////////////////////////
  2. $('#listado').delegate('div.folios', 'click', function(){
  3.     var folioSelected = $(this).html();
  4.     alert (folioSelected);
  5. });
  #8 (permalink)  
Antiguo 05/02/2013, 15:59
 
Fecha de Ingreso: junio-2008
Ubicación: Colombia
Mensajes: 207
Antigüedad: 15 años, 10 meses
Puntos: 12
Respuesta: .click no funciona con tabla generada Dinámicamente

Que bueno que funcionó, saludos.

Etiquetas: js
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 16:28.