2011-07-06 15 views
7

Sé que cuando se crea un elemento de forma dinámica, lo que tienes que usar algo como:Haciendo selector de fechas en vivo - jQuery

$("#id").live("click", function() { 
    //something 
}); 

En este momento tengo esto:

$('#tdInput1').datepicker({ 
    inline: true 
}); 

Mi pregunta es: ¿cómo hacer Lo hago live para que pueda interactuar con elementos creados dinámicamente.

+1

Así que quieres ejecutar '.datepicker ({})' en ciertos elementos, ya que se carga dinámicamente en el DOM? – Luke

Respuesta

11

De acuerdo con: Jquery .live works but not with .datepicker

esto debería funcionar:

$("#tdInput1").live("click", function(){ 
    $(this).datepicker({ 
     inline: true 
    }); 
}); 

edición: Esta respuesta es para versiones anteriores de jQuery. Para jQuery 1.9+ prueba la respuesta de Vishal.

+0

funcionó como un amuleto. ¡Gracias! – craigtb

7

Estás lidiando con dos cosas diferentes. El live de jQuery es para el enlace de eventos, mientras que datepicker no está vinculado específicamente a un evento, sino que simplemente agrega funcionalidad a un elemento en un momento determinado.

El único motivo por el que live funciona con eventos es que jQuery realmente asocia el controlador de eventos a un elemento ancestro y (gracias a la forma en que los eventos aparecen en javascript), el antecesor realmente recibe el evento y lo delega como si viniera del elemento. El principio es algo complicado, pero largo y corto, solo podría funcionar con eventos.

Si desea agregar funcionalidad datepicker, simplemente llame a la función datepicker en el nuevo elemento después de haber sido creado.

+0

gracias ... he tratado de resolver esto por mucho tiempo hasta que encontré tu respuesta – user1862764

19

La solución aceptada no funcionará con eventos de foco de teclado .. así que tuve que cambiar a esto:

$('.parent').on('focusin', '.datepicker', function(e) { 
    $(this).datepicker(options); 
}); 

tuvo que cambiar a .live.on desde jQuery 1.9.1 no incluye el método .live . Lo anterior funciona para los eventos del mouse y para los eventos de enfoque del teclado.

+0

lo he intentado solo, pero me está dando el error de que no hay un método datepicker. ¿Me pueden ayudar –

+0

@Sanyamjain qué versión de jQuery están usando? – Vishal

+0

¿Y incluyó la biblioteca [jQueryUI] (http://jqueryui.com/)? – Vishal

0

creo que la solución más adecuada es:

$('input.datepickerClass').live('focus', function(){ 
    if (false == $(this).hasClass('hasDatepicker')) { 
     $(this).datepicker({ options }); 
    } 
}); 
+0

Evite las respuestas con solo el código fuente; explique lo que está haciendo para que los lectores entiendan lo que intentan decir y por qué. –

Cuestiones relacionadas