所以我当前的时间输入是
= f.input :start_time, :as => :time, :minute_step => 5
但我想限制用户在9:00到17:00之间选择的时间。我尝试了一个:start
对象,但这不起作用,我在time_select助手中找不到任何内容。
答案 0 :(得分:0)
您几乎肯定必须使用一些自定义Javascript来解决此问题。
考虑以下安装更改处理程序的jQuery代码,并执行您要执行的操作:
$("#game_start_time_4i, #game_start_time_5i").change(function() {
var start_hour_element = $("#game_start_time_4i");
var start_minute_element = $("#game_start_time_5i");
var start_hour = start_hour_element.val();
var start_minute = start_minute_element.val();
if (start_hour < "09") {
start_hour_element.val("09");
} else if (start_hour >= "17") {
start_hour_element.val("17");
start_minute_element.val("00");
}
});
您还可以使用jQuery简单地禁用范围之外的所有小时:
$("#game_start_time_4i").find('option').each(function() {
var hour = +$(this).val();
if (hour < 9 || hour > 17) {
$(this).attr('disabled', 'disabled');
}
});
由于这不会禁止像17:30这样的时间,因此您需要将其与上述更改处理程序结合使用。
最后,您还可以使用jQuery删除范围之外的所有小时:
$("#game_start_time_4i").find('option').each(function() {
var hour = $(this).val();
if (hour < "09" || hour > "17") {
$(this).remove();
}
});
此方法也应与第一个代码块中的更改处理程序一起使用。
要查找时间选择元素的确切名称,您需要将生成的HTML视为源。在我的例子中,我在名为“Game”的控制器上使用它,因此元素ID都以game_
为前缀;如果您使用的是FooController
,则可以使用foo_start_time_4i
和foo_start_time_5i
作为元素ID。只要您确保更改您使用的每个time_select的标识符,就可以在页面上拥有任意数量的这些内容。
注意:如果Rails更改命名约定,这可能会稍微有点脆弱,但这绝对是一种可行的方法来获取基于范围的时间输入。