2009-10-18 20 views
7

Gracias por mirar, todas las respuestas sinceramente útiles han sido votadas. Tengo algunos campos de entrada de fecha que están allí cuando la página se carga y un grupo que se genera dinámicamente. En lugar de llamar a .datepicker() en esa clase cada vez que se genera una nueva instancia, estoy usando .live, pero parece que no funciona. ¿Alguna idea de por qué?Jquery .live funciona pero no con .datepicker

$("input[name=myfav]").live("click", function(){ 
    $(this).datepicker({ 
     /* some options here */ 
    }); 
}); 

Debo mencionar que funciona perfectamente bien con autocompletar, por ejemplo.

$("input[name=mytwo]").live("click", function(){ 
    $(this).autocomplete("somefile.php"); 
}); 

Respuesta

26

Aquí es un artículo sobre el selector de fechas utilizando el .live-evento en jQuery:

http://www.vancelucas.com/blog/jquery-ui-datepicker-with-ajax-and-livequery/

El problema es que el selector de fechas funciona uniéndose al evento de foco() por defecto, pero a partir de jQuery 1.3.2, el evento de 'enfoque' no puede ser monitoreado por la función de evento 'en vivo'.

Aquí está la solución del sitio ::

<script type="text/javascript"> 
$(function(){ 
    $('input.calendarSelectDate').live('click', function() { 
     $(this).datepicker({showOn:'focus'}).focus(); 
    }); 
}); 
</script> 

EDIT: Esta solución ya no es necesaria como jQuery 1.4.1+ ahora es compatible con los eventos de enfoque y desenfoque de vivo() . (Gracias @Chris S)

+0

Gracias por la respuesta. Sabía que estaba relacionado con los complementos ya que los otros complementos funcionan bien. Esto lo aclara – Chris

+2

+1 me acabas de ahorrar un montón de tiempo. –

+0

Se metió en el mismo problema. Otra parte de hacer este trabajo, para nosotros, fue asegurarnos de que cada entrada de datepicker tuviera una identificación única. De lo contrario, al menos en Google Chrome, podría hacer clic en cualquiera de las entradas y obtener un marcador de fecha, pero realmente cambiaría la fecha en la primera con esa ID. (Por supuesto, semánticamente, los ID siempre deberían ser únicos, de todos modos, pero ese era el error.) –

4

. Vale la pena señalar que jQuery 1.4.1+ ahora admite eventos de enfoque y desenfoque para live(), por lo que ya no es necesario, mientras que la versión original del póster funciona bien.

+1

lo hizo el trabajo no es para mí, pero $ ("fecha ") viven ({ \t \t $ (this) .datepicker ({ \t \t \t dateFormat" enfoque", la función():. 'Dd/mm/yy ' \t \t}) \t}); hizo – brad

7

Esto es lo que terminé usando. Se aprovecha de live y focus en nuevos jQuery

$.datepicker.setDefaults({ dateFormat: 'yy-mm-dd', ... }); 
$('input.date').live('focus', function() { 
    $(this).datepicker().datepicker('show'); 
    true; 
}); 
0

Actualización: A partir de jQuery 1.7, es obsoleto el método .live(). 1.7, use .on() para adjuntar controladores de eventos. Referencia: http://api.jquery.com/live/