Foros del Web » Programando para Internet » Javascript »

problemas

Estas en el tema de problemas en el foro de Javascript en Foros del Web. Hola que tal! tengo un problema al hacer el siguiente código.... el problema es cuando uso el .html() y lo creo un li y lo ...
  #1 (permalink)  
Antiguo 08/03/2012, 10:15
 
Fecha de Ingreso: marzo-2012
Mensajes: 2
Antigüedad: 12 años, 1 mes
Puntos: 0
Pregunta problemas

Hola que tal! tengo un problema al hacer el siguiente código.... el problema es cuando uso el .html() y lo creo un li y lo agrego se pierde el evento alguien podría ayudarme estaré agradecido:

<!DOCTYPE html>
<html>
<head>
<style>
div { color:blue; font-size:18px; }
</style>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<div id="nav2">
<ul id="2">
<li><a href="#" >Inicio</a></li>
<li><a href="#" >Prductos</a></li>
<li><a href="#" >Catalogo</a></li>
</ul>
</div>

<button id="nombre" name="" title="nose" >Gen valor</button>

<script>
$(document).ready(function(e) {
$("#2 li a").click( function (e)
{
alert('Funciona el evento');
$("#nav2").html( function (index, html) {
return "<ul id='2'> <li><a href='#'>Precios</a></li><li>" +
" <a href='#' >El mas vendido</a></li> <li><a href='#' >Mi carrito</a></li></ul>";
}) ;

e.preventDefault();
}
);


);
});
</script>
</body>
</html>
  #2 (permalink)  
Antiguo 08/03/2012, 15:45
3nr1c
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: problemas

Me gustaría saber porque usas una función como argumento de .html() ....
  #3 (permalink)  
Antiguo 08/03/2012, 17:59
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 1 mes
Puntos: 192
Respuesta: problemas

@3nrlc: Es perfectamente válido. El método .html() puede aceptar una función. La función debe retornar un texto html para que el método lo utilice.

@alex_ore: El problema es claro. La función para el evento "click" se la asignás sólo a los elementos que existen ese momento. Los elementos nuevos no tienen por qué heredar ese tipo de cosas. Sin embargo jQuery tiene el método .delegate(), que sirve para justamente eso:

Código HTML:
Ver original
  1. <!DOCTYPE html>
  2. div { color:blue; font-size:18px; }
  3. <script src="http://code.jquery.com/jquery-latest.js"></script>
  4. </head>
  5. <div id="nav2">
  6.     <ul id="2">
  7.         <li><a href="#" >Inicio</a></li>
  8.         <li><a href="#" >Prductos</a></li>
  9.         <li><a href="#" >Catalogo</a></li>
  10.     </ul>
  11. </div>
  12.  
  13. <button id="nombre" name="" title="nose" >Gen valor</button>
  14.  
  15.     $(document).ready(function(e) {
  16.         $('#nav2').delegate('li a','click',function(e){
  17.             alert('Funciona el evento');
  18.             $("#nav2").html( function (index, html) {  
  19.                 return "<ul id='2'> <li><a href='#'>Precios</a></li><li>" + " <a href='#' >El mas vendido</a></li> <li><a href='#' >Mi carrito</a></li></ul>"; 
  20.             }) ;
  21.             e.preventDefault();
  22.         });
  23.     });
  24. </body>
  25. </html>

.delegate() debe ser asignado a un elemento contenedor de los elementos a los que querés asignar el evento. El primer parámetro es el selector dentro de ese contenedor, el segundo el evento y el tercero la función.

Ahora los elementos nuevos también tienen la función asignada al evento.
__________________
nahueljose.com.ar

Etiquetas: html, 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 12:34.