范围内的简单表格时间输入

时间:2016-05-13 20:52:29

标签: ruby-on-rails simple-form

所以我当前的时间输入是

= f.input :start_time, :as => :time, :minute_step => 5

但我想限制用户在9:00到17:00之间选择的时间。我尝试了一个:start对象,但这不起作用,我在time_select助手中找不到任何内容。

1 个答案:

答案 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_4ifoo_start_time_5i作为元素ID。只要您确保更改您使用的每个time_select的标识符,就可以在页面上拥有任意数量的这些内容。

注意:如果Rails更改命名约定,这可能会稍微有点脆弱,但这绝对是一种可行的方法来获取基于范围的时间输入。