2009-10-18 11 views
7

Merci de regarder, toutes les réponses sincèrement utiles sont votées. J'ai quelques champs d'entrée de date qui sont là quand la page se charge et un groupe qui est généré dynamiquement. Au lieu d'appeler .datepicker() sur cette classe chaque fois qu'une nouvelle instance est générée, j'utilise .live, mais cela ne semble pas fonctionner. Une idée pourquoi?Jquery .live fonctionne mais pas avec .datepicker

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

Je devrais mentionner, cela fonctionne parfaitement bien avec la saisie semi-automatique par exemple.

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

Répondre

26

Voici un article sur le datepicker en utilisant le .live-événement dans jQuery:

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

Le problème est que le Datepicker agit en se liant à l'événement mise au point() par défaut, mais à partir de jQuery 1.3.2, l'événement 'focus' ne peut pas être surveillé par la fonction d'événement 'live'.

Voici la solution de contournement du site ::

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

EDIT: Cette solution de contournement est plus nécessaire que jQuery 1.4.1+ prend désormais en charge les événements de focus et flou pour vivre() . (Merci @Chris S)

+0

Merci pour la réponse. Je savais que c'était lié au plugin puisque les autres plugins fonctionnent bien. Cela le clarifie. – Chris

+2

+1 vous venez de me sauver beaucoup de temps. –

+0

Ran dans le même problème. Une autre partie de ce travail, pour nous, consistait à s'assurer que chaque entrée de datepicker avait un identifiant unique. Sinon, au moins dans Google Chrome, vous pouvez cliquer sur l'une des entrées et obtenir un outil de sélection de date, mais cela changerait la date dans le premier avec cet ID. (Bien sûr, sémantiquement, les identifiants devraient toujours être uniques, de toute façon, mais c'était le bug.) –

4

A noter que jQuery 1.4.1+ soutient maintenant mise au point et le flou des événements pour le live(), de sorte que la solution de contournement, tout frais, est plus nécessaire - la version de l'affiche Orignal fonctionne très bien!

+1

Il n'a pas tout à fait le travail pour moi, mais $ (la "date ") vivent (" focus", function() { \t \t $ (this) .datepicker ({ \t \t \t DATEFORMAT:. « Jj/mm/yy ' \t \t}) \t}); fait – brad

7

C'est ce que j'ai fini par utiliser. Il profite de live et focus dans les nouveaux jQuery

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

Mise à jour: Comme de jQuery 1.7, la méthode .live() est dépréciée. 1.7, utilisez .on() pour attacher des gestionnaires d'événements. Référence: http://api.jquery.com/live/