我创建了一个禁用从数据库中检索的某些日期的代码。
在getDates脚本中,我只是从数据库中检索日期,返回它们并将它们分配给数组unavailableDates。
<script>
var unavailableDates;
function unavailable(date) {
dmy = date.getDate() + "-" + (date.getMonth() + 1) + "-" + date.getFullYear();
if ($.inArray(dmy, unavailableDates) == -1) {
return [true, ""];
} else {
return [false, "", "Unavailable"];
}
}
$(document).ready(function()
{
$("#datepicker").datepicker({
dateFormat: 'yy-mm-dd',
beforeShowDay: unavailable,
minDate: 0,
firstDay: 1, // rows starts on Monday
changeMonth: true,
changeYear: true,
showOtherMonths: true,
selectOtherMonths: true,
altField: '#date_due',
altFormat: 'yy-mm-dd'
});
$('#datepicker').focus(function(){
//alert($('#name').html());
$.ajax({
url: 'getDates.php',
data: "artist_id="+$('#name').html(),
dataType: 'json',
success: function(data)
{
unavailableDates = data;
}
});
})
});
</script>
它工作正常,但只有当我点击两次datepicker时。当我第一次点击它时显示所有日期(无论它们是否可用)。当我再次点击时,它会显示不可用的日期。
有谁知道为什么?感谢
答案 0 :(得分:1)
因为您在显示日期选择器时启动了获取不可用日期的请求。你必须提前做到这一点。在后端请求的回调中,您可以显示日期选择器。
答案 1 :(得分:1)
在您的ajax调用中添加async:false,以便应用程序在继续之前等待响应,如此
$('#datepicker').focus(function(){
//alert($('#name').html());
$.ajax({
url: 'getDates.php',
data: "artist_id="+$('#name').html(),
dataType: 'json',
async: false,
success: function(data)
{
unavailableDates = data;
}
});
另一个想法,你可以将这个ajax调用直接添加到不可用的函数中,而不是先运行两个东西,onFocus和beforeShowDay(尽管我对beforeShowDay函数并不十分熟悉)
这可能会减慢日期选择器的开放速度,因为它必须等待服务,因此取决于您的服务速度以及您的性能要求。其他选项,如果这可能会减慢将弹出一个“获取日期”消息或每隔X秒拉一次服务器页面(虽然这可能会增加很多额外的服务调用......)
编辑:发表评论后......
"basically when user selects an option (here they want to book artists so \
when user selects an artist), the unavailable dates of datepicker are
updated automatically."
在选择艺术家时加载列表似乎更有意义,除非您在页面打开时关注更改。在那种情况下,我会做类似......
On Artist Changed
-Disable date picker, possibly add a small note next to it / under it /
over it that it is loading
-Start ajax call with async true
-In ajax success function, re-enable the picker and remove the message.
这将允许UI保持活动状态,允许用户在加载日期时输入其他信息,如果服务足够快,甚至几乎不知道它已被禁用一秒钟。你的日期不会像其他方式那样“活跃”,但听起来并不像他们需要那样活着。无论如何,您需要重新检查表单的提交日期。
答案 2 :(得分:0)
var data = $.getJSON($url, function (data) {
//your logic
}).success(function (data) {
//Trigger the first click
$('.datepicker').trigger('click');
});
$(".div_fader").on('click','.datepicker', function () {
$(this).datepicker();
});