2012-02-28 26 views
5

Aquí envío ID de película y obtengo días disponibles y deseo configurarlo en el calendario. pero no funciona y desactiva todas las fechas. Desde PHP, devuelve cadena de fecha. La cadena de fecha viene correctamente pero el calendario no funciona. Por favor ayuda.Seleccione solo fechas específicas en jQuery UI datepicker (la lista de fechas proviene de AJAX)

ejemplo Fecha cadena

"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" 

Código

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: "<?php echo IMAGES_LINK.'calendar.png';?>", 
    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; 
}); 
+0

@Sudhir sí, pero desde que tomé la beforeShowDay: function() de http://stackoverflow.com/questions/7709320/jquery-ui-datepicker-enable-only-specific-days-in-array que usó ese formato. pero antes usaba Y-m-d pero no funcionaba. – Sara

+0

¿Qué obtienes en console.log (dmy + ... –

+0

No tengo ni idea al respecto. Tomé la función de http://stackoverflow.com/questions/7709320/jquery-ui-datepicker-enable- only-specific-days-in-array. Cuando pasé una matriz de días definida, funciona. – Sara

Respuesta

12
  • Inicializar el datapicker una sola vez; contarla a buscar fechas válidas a partir de una matriz global
  • inicializar la matriz global utilizando literal de matriz, que se actualizará a través de AJAX siempre que sea necesario
  • Llame al .datepicker("refresh") método cada vez que cambian las fechas habilitadas discapacitados/- es decir, cuando se obtiene nuevos resultados a través de AJAX
  • Su código no añadir ceros a la izquierda a la fecha, por lo tanto $.inArray no funcionará como se espera

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 
    }); 

Demo here

+0

¡Qué gran respuesta! Muchas gracias. – Sara

+0

Dulce, estaba sacando el pelo por qué esto estaba funcionando parcialmente. faltaba los ceros a la izquierda! bien visto :) +1 –

Cuestiones relacionadas