Sélectionnez uniquement des dates spécifiques dans jpu uu datepicker (la liste des dates provient d’AJAX)

Ici, j’envoie un identifiant de film et obtiens les jours disponibles et je veux le définir dans le calendrier mais cela ne fonctionne pas et désactive toutes les dates. Depuis PHP, il retourne la chaîne de date. La chaîne de date arrive correctement mais le calendrier ne fonctionne pas. S’il vous plaît aider.

Exemple de chaîne de date

"28-02-2012","29-02-2012","01-03-2012","02-03-2012","03-03-2012","04-03-2012","05-03-2012","06-03-2012","07-03-2012","08-03-2012","09-03-2012","28-02-2012","29-02-2012","01-03-2012","02-03-2012","03-03-2012","04-03-2012","05-03-2012","06-03-2012","07-03-2012","08-03-2012","09-03-2012" 

Code

 jQuery.post('index.php', { 'option': 'com_movie', 'controller': 'reservation', 'task': 'datelist', 'format': 'raw', 'mid': movieid }, function(result) { var onlydates = result.split(','); jQuery("#datepicker").datepicker({ dateFormat: 'yy-mm-dd', showOn: "button", buttonImage: "", buttonImageOnly: true, beforeShowDay: function(date) { dmy = date.getDate() + "-" + (date.getMonth() + 1) + "-" + date.getFullYear(); console.log(dmy + ' : ' + (jQuery.inArray(dmy, onlydates))); if (jQuery.inArray(dmy, onlydates) != -1) { return [true, "", "Available"]; } else { return [false, "", "unAvailable"]; } } }); return; }); 

  • Initialisez le datapicker une seule fois; dites-lui d’aller chercher des dates valides dans un tableau global
  • Initialiser le tableau global en utilisant littéral tableau, le mettre à jour via AJAX chaque fois que nécessaire
  • Appelez la .datepicker("refresh") chaque fois que les dates désactivées / activées changent – c’est-à-dire lorsque vous obtenez de nouveaux résultats via AJAX
  • Votre code n’ajoute pas de zéros au $.inArray dates, donc $.inArray ne fonctionnera pas comme prévu

 var datelist = []; // initialize empty array $("#datepicker").datepicker({ beforeShowDay: function(d) { // normalize the date for searching in array var dmy = ""; dmy += ("00" + d.getDate()).slice(-2) + "-"; dmy += ("00" + (d.getMonth() + 1)).slice(-2) + "-"; dmy += d.getFullYear(); return [$.inArray(dmy, datelist) >= 0 ? true : false, ""]; } }); $("#button").click(function() { datelist = []; // empty the array $.post("/echo/html/", { // parameters here }, function() { var result = "28-02-2012,29-02-2012,01-03-2012,02-03-2012,03-03-2012,04-03-2012,05-03-2012,06-03-2012,07-03-2012,08-03-2012,09-03-2012,28-02-2012,29-02-2012,01-03-2012,02-03-2012,03-03-2012,04-03-2012,05-03-2012,06-03-2012,07-03-2012,08-03-2012,09-03-2012"; // dummy result datelist = result.split(","); // populate the array $("#datepicker").datepicker("refresh"); // tell datepicker that it needs to draw itself again }); 

Démo ici