estoy usando este datepicker en el proyecto en el que estoy trabajando actualmente, y me ha sorprendido gratamente por su versatilidad.
Aunque es muy fácil habilitar y deshabilitar fechas pasándole un array con dichas fechas, el problema me viene cuando quiero pasarle dichas fechas dinámicamente con ajax: aunque mi función va bien al cargar por primera vez el calendario, no funciona igual de bien al actualizar el calendario (al pasar al siguiente mes o año), no habilita las fechas.
Es una aplicación de reservas, luego hay dos calendarios, uno de fecha de inicio y otro de fecha final. Este es el código problemático:
Código :
// Inicializar los inputs y los calendarios
function initialiseInputs(){
// Añadir el evento on change al calendario de fecha de inicio
datePickerController.addEvent(document.getElementById("dateStart"), "change", setReservationDates);
// Inicializar el rango mínimo del calendario de fecha final
var sd = datePickerController.getDatePicker("dateStart"); // llamamos sd al datepicker de inicio
var ed = datePickerController.getDatePicker("dateEnd"); // llamamos ed al datepicker final
var dt = datePickerController.dateFormat(document.getElementById("dateStart").value, sd.format.charAt(0) == "m"); //dar formato a la fecha del calendario de inicio
ed.setRangeLow(dt); // asignar esa fecha como rango mínimo del calendario final
var this_year = sd.date.getFullYear(); // this_year es el año que muestra el calendario
var this_month = sd.date.getMonth() + 1; // this_month es el mes que muestra el calendario
setBookableDates(sd, this_year, this_month, '');
// Añadir el evento onupdate a ambos calendarios
var dp;
datePickerController.onupdate = function(dp){
// dp = the datePicker Object
// dp.date = the datePickers Date Object
var this_year = dp.date.getFullYear();
var this_month = dp.date.getMonth() + 1;
setBookableDates(dp, this_year, this_month, '');
}
// Set the low range of the second datePicker to be the date parsed from the first
//var dt = datePickerController.dateFormat(document.getElementById("dateStart").value, sd.format.charAt(0) == "m");
//document.getElementById("dateStart").setRangeLow( dt );
}
function setBookableDates(dp, year, month, day) {
var objAJAX=createAJAXEngine(); // A new instance is created
/* Define the function to be run when readystate changes */
var load_page = 'xml/bookable_dates.php';
var this_time = new Date();
load_page += '?year=' + year
+ '&month=' + month
+ '&day=' + day
+ '&seed=' + this_time.getTime();
objAJAX.onreadystatechange = function() {
if (objAJAX.readyState == 4) {
var bookable_dates = parse_dates_XML(objAJAX);
// Enable dates
alert('primera fecha habilitada del mes ' + month + ': ' + bookable_dates[0]); //funciona siempre
dp.setEnabledDates(bookable_dates); //funciona solo cuando se muestra el calendario por primera vez, no onupdate
}
}
objAJAX.open('GET', load_page, true); /* Request the xml */
objAJAX.send(null); /* Send the request*/
}Espero me podais echar una mano. Gracias y un saludo
