Jquery UI 日期选择器 - 仅启用从服务器返回的日期数组
Jquery UI datepicker - enable only array of dates returned from server
关于这个主题,我几乎每个 post 都读过。这不是什么新鲜事。然而,每次有人在不同的背景下带着同样的问题来到这里。似乎 JQUERY UI 应该在其下一个大版本中固有地支持这一点。好的,现在这是我的代码,我只想启用从控制器返回到我的视图的日期选择器中的那些日期,我在 <input>
隐藏字段中输入了这些日期。这是我的 html:
<?php foreach ($trip_dates as $single_trip_date) { ?>
<form id="datesetter">
<?php $date = new DateTime($single_trip_date->trip_date); ?>
<input type="hidden" value="<?= $date->format('d-m-Y'); ?>"/>
这是我的代码:
$(document).ready(function(){
var date_d = [];
$("#datesetter input[type=hidden]").each(function() {
var date_d = new Date();
date_d = [$(this).val()];
console.log(date_d); // Output is: ["12-01-2016"] ["14-01-2016"]
function addZ(n) {
return (n < 10? '0' : '') + n;
}
function available(date) {
dmy = addZ(date.getDate()) + "-" + addZ((date.getMonth()+1)) + "-" + date.getFullYear();
if ($.inArray(dmy, date_d) == -1) {
console.log(dmy);
console.log("php dates: "+date_d); //out put is only first date in series, i.e. 12-01-2016
return [false, ""];
} else {
return [true,"","Unavailable"];
}
}
$('#datepick').datepicker({
dateFormat: 'dd/mm//yy',
beforeShowDay: available
});
});
});
但是当我在 console.log 中看到可用函数中可用日期的输出时,它只重复打印第一个日期系列,没有另一个日期的迹象,即 14-01-2016。
结果,在日期选择器中只启用了第 12 个日期,而其他所有日期都被禁用。我希望启用 date_d 变量中的所有日期。谁能告诉我怎么做?
这样应该可以,如果你有问题我可以更新
更新
还有一件事,从 php ('d-m-Y'
) 返回的日期有不同的格式
与日期选择器中的日期对比 ('dd/mm//yy'
)
使用相同,即日期选择器中的格式应为 'dd-mm-yy'
,相当于 php 的 'd-m-Y'
格式
var available_formatted_dates_list = [/*put your formatted date strings here.. eg "01-01-2016", "01-12-2016"*/];
function check_available_date( date )
{
var formatted_date = '', ret = [true, "", ""];
if (date instanceof Date)
{
formatted_date = $.datepicker.formatDate( 'dd-mm-yy', date );
}
else
{
formatted_date = '' + date;
}
if ( -1 === available_formatted_dates_list.indexOf(formatted_date) )
{
ret[0] = false;
ret[1] = "date-disabled"; // put yopur custom csc class here for disabled dates
ret[2] = "Date not available"; // put your custom message here
}
return ret;
}
$('#datepick').datepicker({
dateFormat: 'dd-mm-yy',
beforeShowDay: check_available_date
});
jQuery UI datepicker beforeShowDay option
您可以使用 $.datepicker.formatDate
实用函数来格式化日期以匹配可用的日期格式,然后检查它是否匹配
而不是创建自己的格式
此外,您可能应该将隐藏字段中的所有可用日期放入一个数组中,如下所示(只做一次而不是每次):
var available_formatted_dates_list = [];
// fill the available dates list from the hidden fields
$("#datesetter input[type=hidden]").each(function() {
available_formatted_dates_list.push($(this).val());
});
然后使用填充的 available_formatted_dates_list
数组从 datepicker
中过滤日期,就像上面的第一个例子一样。
您与日期选择器相关的代码有效,只需 fixed 在数组中添加日期:
date_d.push($(this).val());
关于这个主题,我几乎每个 post 都读过。这不是什么新鲜事。然而,每次有人在不同的背景下带着同样的问题来到这里。似乎 JQUERY UI 应该在其下一个大版本中固有地支持这一点。好的,现在这是我的代码,我只想启用从控制器返回到我的视图的日期选择器中的那些日期,我在 <input>
隐藏字段中输入了这些日期。这是我的 html:
<?php foreach ($trip_dates as $single_trip_date) { ?>
<form id="datesetter">
<?php $date = new DateTime($single_trip_date->trip_date); ?>
<input type="hidden" value="<?= $date->format('d-m-Y'); ?>"/>
这是我的代码:
$(document).ready(function(){
var date_d = [];
$("#datesetter input[type=hidden]").each(function() {
var date_d = new Date();
date_d = [$(this).val()];
console.log(date_d); // Output is: ["12-01-2016"] ["14-01-2016"]
function addZ(n) {
return (n < 10? '0' : '') + n;
}
function available(date) {
dmy = addZ(date.getDate()) + "-" + addZ((date.getMonth()+1)) + "-" + date.getFullYear();
if ($.inArray(dmy, date_d) == -1) {
console.log(dmy);
console.log("php dates: "+date_d); //out put is only first date in series, i.e. 12-01-2016
return [false, ""];
} else {
return [true,"","Unavailable"];
}
}
$('#datepick').datepicker({
dateFormat: 'dd/mm//yy',
beforeShowDay: available
});
});
});
但是当我在 console.log 中看到可用函数中可用日期的输出时,它只重复打印第一个日期系列,没有另一个日期的迹象,即 14-01-2016。
结果,在日期选择器中只启用了第 12 个日期,而其他所有日期都被禁用。我希望启用 date_d 变量中的所有日期。谁能告诉我怎么做?
这样应该可以,如果你有问题我可以更新
更新
还有一件事,从 php ('d-m-Y'
) 返回的日期有不同的格式
与日期选择器中的日期对比 ('dd/mm//yy'
)
使用相同,即日期选择器中的格式应为 'dd-mm-yy'
,相当于 php 的 'd-m-Y'
格式
var available_formatted_dates_list = [/*put your formatted date strings here.. eg "01-01-2016", "01-12-2016"*/];
function check_available_date( date )
{
var formatted_date = '', ret = [true, "", ""];
if (date instanceof Date)
{
formatted_date = $.datepicker.formatDate( 'dd-mm-yy', date );
}
else
{
formatted_date = '' + date;
}
if ( -1 === available_formatted_dates_list.indexOf(formatted_date) )
{
ret[0] = false;
ret[1] = "date-disabled"; // put yopur custom csc class here for disabled dates
ret[2] = "Date not available"; // put your custom message here
}
return ret;
}
$('#datepick').datepicker({
dateFormat: 'dd-mm-yy',
beforeShowDay: check_available_date
});
jQuery UI datepicker beforeShowDay option
您可以使用 $.datepicker.formatDate
实用函数来格式化日期以匹配可用的日期格式,然后检查它是否匹配
而不是创建自己的格式
此外,您可能应该将隐藏字段中的所有可用日期放入一个数组中,如下所示(只做一次而不是每次):
var available_formatted_dates_list = [];
// fill the available dates list from the hidden fields
$("#datesetter input[type=hidden]").each(function() {
available_formatted_dates_list.push($(this).val());
});
然后使用填充的 available_formatted_dates_list
数组从 datepicker
中过滤日期,就像上面的第一个例子一样。
您与日期选择器相关的代码有效,只需 fixed 在数组中添加日期:
date_d.push($(this).val());