虽然我得到了所有预订日期的正确json响应(我在Controller中有相应的代码来计算开始和结束日期之间的日期),如下所示:
["30 September 2015","1 October 2015","2 October 2015","3 October 2015"]
只有当月(9月)的日期标记为红色。十月的日期,虽然预订不要标记为红色。有两个类似的代码片段,但一个是获取预订的日期(在页面加载时通过ajax完成,然后另一个响应按钮以添加要预订的日期)
在这里的代码中," myDate"应该是发送到beforeshowday函数的Datepicker的运行日期,但它似乎只发送9月的那些,所以其余部分不能与我的baddates进行比较,即返回的预订天数(数据)
是的,"之前的文件"表示:
"在显示日期选择器之前,每天都会调用该函数。 因此,只会在显示的日期调用该函数。"
实际上,我可以想象jquery会自动查看显示的月份,然后将该月的所有日期发送到与预订日期的json数组进行比较。这样,为什么在我打开那个日历月时不会发送10月份?
(代码中有一些"多余的"代码片段"已预订的时间段"是一个没有方法的控制器的路由,因为我注意到它是无用的。)
这可以在这里看到:
http://chefvillas.com/detailsproperty/36
<script>
jQuery(document).ready(function(){
$(function() {
var startdate = $('#start_date').val();
var owner =36;
var user = 24;
var enddate = $('#end_date').val();
$url = '{{URL::route('bookedperiods')}}';
$.post($url, {
arrival: startdate,
departure: enddate,
user_id: owner,
booked_by: user
}, function hola (data) {
$('#test').text(data);
$myBadDates = (data);
});
$("#start_date, #end_date").datepicker({
dateFormat: 'dd MM yy',
numberOfMonths: 2,
beforeShowDay: checkBadDates
});
});
function checkBadDates(mydate){
var $return=true;
var $returnclass ="available";
$checkdate = $.datepicker.formatDate('dd MM yy', mydate);
for(var i = 0; i < $myBadDates.length; i++)
{
if($myBadDates[i] == $checkdate)
{
$return = false;
$returnclass= "unavailable";
}
}
return [$return,$returnclass];
}
$('#botoncalendario').click(function(){
var startdate = $('#start_date').val();
var owner =36;
var user = 24;
var enddate = $('#end_date').val();
$url = '{{URL::route('reservations')}}';
$.post($url, {
arrival: startdate,
departure: enddate,
user_id: owner,
booked_by: user
}, function hola (data) {
$('#test').text(data);
});
});
});
</script>
答案 0 :(得分:0)
问题是数组中的日期格式,因为您已使用dd MM yy
$checkdate
,其日期值将0
作为01
的前缀,而不是$checkdate = $.datepicker.formatDate('dd MM yy', mydate);
与数组匹配
jQuery(function($) {
var $myBadDates = ["30 September 2015", "1 October 2015", "2 October 2015", "3 October 2015"];
$("#start_date, #end_date").datepicker({
dateFormat: 'dd MM yy',
numberOfMonths: 2,
beforeShowDay: checkBadDates
});
function checkBadDates(mydate) {
var $return = true,
$returnclass = "available",
$checkdate = $.datepicker.formatDate('d MM yy', mydate);
if ($myBadDates.indexOf($checkdate) > -1) {
$return = false;
$returnclass = "unavailable";
}
return [$return, $returnclass];
}
});
您还可以简化checkdate实现,如下所示
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.js"></script>
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/redmond/jquery-ui.css">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.js"></script>
<input id="start_date" />
<input id="end_date" />
&#13;
([^b]*b){4}[^b]*
&#13;