Telerik Kendo TimePicker 最小/最大设置被忽略
Telerik Kendo TimePicker Min / Max setting get ignored
我有两个 Kendo TimePicker:from
和 to
我试图实现的是使用JavaScript来改变这些TimePickers的下拉列表选项的范围。两个TimePickers的间隔都是30分钟,从00:00到23:30.
比如选择from
到14:30,那么打开to
时的选项至少是14:30。同样,如果选择to
到20:00,那么from
的最大选项就是20:00
我已经编写了我的代码并且一切正常 除了 当 from
和 to
都选择了最后一个选项 (23:30) 时,预期的行为是 to
的选项只是 23:30 本身。然而,实际上to
的选项是所有时间跨度,即30分钟间隔,从23:30开始,到23:00(即23:30,00:00 , 00:30, ... 23:00)
我已经尝试了许多其他 "combinbations",包括都设置为 00:00,都显示正确的行为,除了这种情况。不知是不是Telerik控件的已知bug,还是我的代码有什么问题?我怎样才能实现预期的行为?
var $start = $startSel.data("kendoDateTimePicker");
var $end = $endSel.data("kendoDateTimePicker");
var start = $startSel.val() == "" ? null : $start.value();
var end = $endSel.val() == "" ? null : $end.value();
if (start != null) {
$end.min(comLib.ceilTo30Minute(start));
} else {
$end.min(new Date(1900, 0, 1));
$end.max(new Date(2099, 11, 31));
}
if (end != null) {
$start.max(comLib.floorTo30Minute(end));
} else {
$start.min(new Date(1900, 0, 1));
$start.max(new Date(2099, 11, 31));
}
///////////////////// in comLib
function ceilTo30Minute (dateTime) {
if (dateTime == null)
return null;
var min = dateTime.getMinutes() % 30;
if (min != 0)
{
dateTime = publicAccess.addTime(dateTime, 0, -min);
dateTime = publicAccess.addTime(dateTime, 0, 30);
}
return dateTime;
};
function floorTo30Minute(dateTime) {
if (dateTime == null)
return null;
var min = dateTime.getMinutes() % 30;
if (min != 0) {
dateTime = publicAccess.addTime(dateTime, 0, -min);
}
return dateTime;
};
我已经打开了一个支持票,Telerik 已经回复了我,结果这似乎是一个 Kendo UI 错误。我在这里引用他们的回复:
This seems to be a bug in the DateTimePicker and I will forward it to our developers team for further investigation. For the time being you could handle the open event of the second DateTimePicker and manually hide the unwanted times:
datetimepicker.bind("open", function(e) {
if (e.view === "time" && e.sender.min().toString().indexOf("23:30:00") >= 0) {
var times = e.sender.timeView.popup.element.find("li");
for(var i=1; i < times.length; i++){
$(times[i]).hide();
}
}
});
我有两个 Kendo TimePicker:from
和 to
我试图实现的是使用JavaScript来改变这些TimePickers的下拉列表选项的范围。两个TimePickers的间隔都是30分钟,从00:00到23:30.
比如选择from
到14:30,那么打开to
时的选项至少是14:30。同样,如果选择to
到20:00,那么from
的最大选项就是20:00
我已经编写了我的代码并且一切正常 除了 当 from
和 to
都选择了最后一个选项 (23:30) 时,预期的行为是 to
的选项只是 23:30 本身。然而,实际上to
的选项是所有时间跨度,即30分钟间隔,从23:30开始,到23:00(即23:30,00:00 , 00:30, ... 23:00)
我已经尝试了许多其他 "combinbations",包括都设置为 00:00,都显示正确的行为,除了这种情况。不知是不是Telerik控件的已知bug,还是我的代码有什么问题?我怎样才能实现预期的行为?
var $start = $startSel.data("kendoDateTimePicker");
var $end = $endSel.data("kendoDateTimePicker");
var start = $startSel.val() == "" ? null : $start.value();
var end = $endSel.val() == "" ? null : $end.value();
if (start != null) {
$end.min(comLib.ceilTo30Minute(start));
} else {
$end.min(new Date(1900, 0, 1));
$end.max(new Date(2099, 11, 31));
}
if (end != null) {
$start.max(comLib.floorTo30Minute(end));
} else {
$start.min(new Date(1900, 0, 1));
$start.max(new Date(2099, 11, 31));
}
///////////////////// in comLib
function ceilTo30Minute (dateTime) {
if (dateTime == null)
return null;
var min = dateTime.getMinutes() % 30;
if (min != 0)
{
dateTime = publicAccess.addTime(dateTime, 0, -min);
dateTime = publicAccess.addTime(dateTime, 0, 30);
}
return dateTime;
};
function floorTo30Minute(dateTime) {
if (dateTime == null)
return null;
var min = dateTime.getMinutes() % 30;
if (min != 0) {
dateTime = publicAccess.addTime(dateTime, 0, -min);
}
return dateTime;
};
我已经打开了一个支持票,Telerik 已经回复了我,结果这似乎是一个 Kendo UI 错误。我在这里引用他们的回复:
This seems to be a bug in the DateTimePicker and I will forward it to our developers team for further investigation. For the time being you could handle the open event of the second DateTimePicker and manually hide the unwanted times:
datetimepicker.bind("open", function(e) {
if (e.view === "time" && e.sender.min().toString().indexOf("23:30:00") >= 0) {
var times = e.sender.timeView.popup.element.find("li");
for(var i=1; i < times.length; i++){
$(times[i]).hide();
}
}
});