7 votes

Jquery .en direct fonctionne mais pas avec .datepicker

Merci de regarder, toutes les réponses sincèrement utiles sont votées. J'ai quelques champs de saisie de date qui sont là quand la page se charge et quelques-uns qui sont générés 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?

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

Je devrais mentionner que cela fonctionne parfaitement avec l'autocomplétion par exemple.

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

26voto

Espo Points 24318

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

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

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

Voici la solution de contournement du site :

$(function(){
    $('input.calendarSelectDate').live('click', function() {
        $(this).datepicker({showOn:'focus'}).focus();
    });
});

EDIT : Ce contournement n'est plus nécessaire car jQuery 1.4.1+ prend désormais en charge les événements focus et blur pour live(). (Merci @Chris S)

8voto

fringd Points 869

C'est ce que j'ai fini par utiliser. Il tire parti des live et focus de la nouvelle version de jQuery

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

4voto

Chris S Points 329

Il convient de noter que jQuery 1.4.1+ prend désormais en charge les événements focus et blur pour live(), donc la solution de contournement, bien que cool, n'est plus nécessaire - la version de l'auteur original fonctionne bien!

0voto

Anoop Pete Points 169

Mise à jour : À partir de jQuery 1.7, la méthode .live() est obsolète. Utilisez .on() pour attacher des gestionnaires d'événements. Référence : http://api.jquery.com/live/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X