我想在用户选择日期时从下拉列表中禁用过去的时间。 以下是示例代码:
function (declare, DateTextBox, locale, dom, lang, registry, ready) {
var pad, update_current_available_times, get_hour_string;
pad = function (n) {
n = n + '';
return n.length >= 2 ? n : new Array(2 - n.length + 1).join('0') + n;
},
get_hour_string = function (t) {
var hour = pad(t.getHours()-1);
var minute = pad(t.getMinutes());
return 'T' + hour + ':' + minute + ':00';
},
分钟,我改变如下,但给出了错误的结果。但是当试图从分钟禁用过去的时间给出意想不到的结果时。
get_hour_string = function (t) {
var hour = pad(t.getHours()-1); //added -1 to disable past time when used dojo1.9
var d1 = new Date (),
d2 = new Date ( d1 );
d2.setMinutes ( d1.getMinutes() + 20 );
var minute1 = pad(d2.getMinutes());
alert("d2.getMinutes() : " + d2.getMinutes() );
return 'T' + hour + ':' + minute1 + ':00';
}
请建议javascript文件中有哪些更改需要修复从分钟下拉列表中禁用过去时间。
答案 0 :(得分:1)
对我而言似乎你几乎正在工作..?
如果我正确地看着你的小时选择器的onChange功能,你只需要改变:
useMin = 'T02:' + pad(now.getMinutes()) + ':00';
到
useMin = 'T' + pad(v.getHours()) + ':' + pad(now.getMinutes()) + ':00';
这有用吗? http://jsfiddle.net/8o23tbLu/27/
编辑:啊,我看到你正在使用一个小技巧,只显示分钟下拉菜单中的分钟数。你可能只是使用dijit / form / Select,但这是一个很好的技巧!
由于您已将visibleIncrement和clickableIncrement设置为02:05:00和02:00:00,因此实际显示的下拉列表是:
00:的 00 强>:00
02:的 05 强>:00
04:的 10 强>:00
...
22:的 55 强>:00
因此,在分钟下拉菜单上设置最小约束时,您实际上也必须设置“不可见”小时。
例如,如果“now”为14: 34 :00,则必须花费34分钟,检查它属于哪个2小时“群组”:34 % 5 = 6ish
然后从那里得到一小时:2 * 6 = 12
..所以在这种情况下,分钟下拉列表的useMin
将是T12:34:00。
useMin = 'T' +
pad(2 * Math.floor(now.getMinutes() / 5)) + ':' +
pad(now.getMinutes()) + ':00';
至少我认为会这样做:)可能有一个更简单的解决方案。