Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/07/2013, 09:17
Avatar de metacortex
metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 20 años, 5 meses
Puntos: 832
Increíble: plugin Livequery para aplicar funciones jQuery en vivo a nuevos elementos

Estaba usando el plugin Chosen para elementos de mi formulario, y además tenía un botón para agregar nuevos elementos. Colocaré algo de código extra para quienes hayan tenido este mismo problema:

Código Javascript:
Ver original
  1. $(".datos").chosen(); // Clase de cada input que quiero afectar con Chosen
  2.  
  3. var contenedor = $("#contenedor");
  4.  
  5. var i = $(".capa").size() + 1;
  6.  
  7. $("#agregar").live("click", function() { // Enlace que sirve de botón para agregar un nuevo bloque de inputs
  8.     $('Mi HTML...').appendTo(contenedor);
  9.     i++;
  10.     return false;
  11. });

El problema: al presionar el botón #agregar, ciertamente se creaba el nuevo HTML, pero sin las funciones del plugin Chosen. Intenté aplicando .live() en las maneras recomendadas para este caso, al igual que otras funciones, todo sin resultado.

La solución:

Descargué el plugin Livequery y lo instalé de primero, justo después de jquery.js. Cambié la función -justo como la ven abajo- y refresqué la página pensando que no iba a resultar a la primera (porque con jQuery nada me resulta a la primera) y paf! el cambio se dio.

Antes:
Código Javascript:
Ver original
  1. $(".datos").chosen();

Después:
Código Javascript:
Ver original
  1. $(".datos").livequery(function() { $(this).chosen(); });

A partir de entonces, he usado dicho plugin de forma exitosa para este tipo de situaciones, cuando quiero que los elementos creados de forma dinámica sean arropados por X función. Lo recomiendo.