J'ai créé des zones de texte dynamiquement et je souhaite que chacune d'elles puisse afficher un calendrier en un clic. Le code que j'utilise est:
$(".datepicker_recurring_start" ).datepicker();
Ce qui ne fonctionnera que sur la première zone de texte, même si toutes mes zones de texte ont une classe appelée datepicker_recurring_start.
Votre aide est très appréciée!
javascript
jquery
jquery-ui
datepicker
trempé
la source
la source
Réponses:
voici l'astuce:
DEMO
La
$('...selector..').on('..event..', '...another-selector...', ...callback...);
syntaxe signifie:Ajouter un écouteur à
...selector..
(lebody
dans notre exemple) pour l'événement..event..
('focus' dans notre exemple). Pour tous les descendants des nœuds correspondants qui correspondent au sélecteur...another-selector...
(.datepicker_recurring_start
dans notre exemple), appliquez le gestionnaire d'événements...callback...
(la fonction en ligne dans notre exemple)Voir http://api.jquery.com/on/ et en particulier la section sur les "événements délégués"
la source
.datapicker()
chaque fois que la zone de texte gagne le focus - vous voudrez donc faire attention avec cette approche (en supposant que je lis bien). Cependant, je pense que vous seriez d'accord avec le.datapicker()
car il vérifiera probablement si un sélecteur de date est créé avant d'essayer de recréer. Avec un autre code, vous pourriez ne pas avoir cette grâce. De plus, .on (n'est introduit que dans JQuery 1.7 - alors assurez-vous que vous utilisez la bonne version.:not(.hasDatepicker)
Pour moi ci-dessous jquery a fonctionné:
changement de "corps" en document
Merci à skafandri
Remarque: assurez-vous que votre identifiant est différent pour chaque champ
la source
Excellente réponse de skafandri +1
Ceci est juste mis à jour pour vérifier la classe hasDatepicker.
la source
$('body').on('focus',".datepicker:not(.hasDatepicker)", function(){$(this).datepicker();});
?Assurez-vous que votre élément avec la
.date-picker
classe n'a PAS déjà dehasDatepicker
classe. Si c'est le cas, même une tentative de réinitialisation avec$myDatepicker.datepicker();
échouera! Au lieu de cela, vous devez faire ...la source
Vous devez réexécuter le
.datepicker();
après avoir créé dynamiquement les autres éléments de zone de texte.Je recommanderais de le faire dans la méthode de rappel de l'appel qui ajoute les éléments au DOM.
Supposons que vous utilisiez la méthode JQuery Load pour extraire les éléments d'une source et les charger dans le DOM, vous feriez quelque chose comme ceci:
la source
La nouvelle méthode pour les éléments dynamiques est MutationsObserver .. L'exemple suivant utilise le soulignement.js pour utiliser la fonction (_.each).
la source
C'est ce qui a fonctionné pour moi (en utilisant jquery datepicker):
la source
Aucune des autres solutions n'a fonctionné pour moi. Dans mon application, j'ajoute les éléments de la plage de dates au document à l'aide de jquery, puis je leur applique le sélecteur de date. Aucune des solutions événementielles n'a donc fonctionné pour une raison quelconque.
C'est ce qui a finalement fonctionné:
J'espère que cela aide quelqu'un parce que cela m'a un peu reculé.
la source
vous pouvez ajouter la classe .datepicker dans une fonction javascript, pour pouvoir changer dynamiquement le type d'entrée
la source
J'ai modifié la réponse @skafandri pour éviter de réappliquer le
datepicker
constructeur à toutes les entrées avec.datepicker_recurring_start
classe.Voici le HTML:
Voici le JS:
voici une démo fonctionnelle
la source
C'est ce qui a fonctionné pour moi sur JQuery 1.3 et qui s'affiche au premier clic / focus
cela nécessite que votre entrée ait la classe 'mostrar_calendario'
Live est pour JQuery 1.3+ pour les versions plus récentes, vous devez l'adapter à "on"
En savoir plus sur la différence ici http://api.jquery.com/live/
la source
la source