是否可以将date_select与年份文本框一起使用?

时间:2012-11-16 02:46:53

标签: ruby-on-rails ruby-on-rails-3

我正在寻找创建一个带有日期字段的祖先类型网页,该日期字段允许用户输入一个返回到该数字的日期。这使得date_select带有下拉框,而jquery datepicker非常不友好。

有谁知道显示年度文本框的好方法,但是月份和日期的下拉菜单?

我希望使用date_select的“智能”,同时仍然允许用户以更加用户友好的方式输入年份(文本框)。

感谢你们给我的任何帮助!

3 个答案:

答案 0 :(得分:1)

非常尊重Rails的开发人员,几乎任何情况下date_select的可用性都非常弱:-)

与其他字段类型不同,date_select帮助程序生成三个具有特殊名称和ID的选择标记,分别用于年,月和日元素。它的命名约定允许控制器代码在处理params数组时自动将输入重新组合成(单个)日期。

抱歉,我没有一个方便的命名格式示例(因为我从不使用date_select),但是如果你看一下这些字段的名字,你可以通过使用来模仿行为而不会有太多的hackery :discard_year选项。这可以获得包含当前年份的月份和日期字段以及隐藏字段(我认为)。

如果您不反对JS或CoffeeScript,可以在加载DOM后修改输入字段,方法是删除hidden“type”属性(从而使其成为一个简单的文本字段)将其值设置为空。

答案 1 :(得分:0)

我会在三个选项之间进行选择

1 - 仅在日期和月份使用date_select,在年份使用带有一些javascript的文本字段

Date_select接受:discard_year选项,如果将其设置为true,则year字段将呈现为hidden_​​field,因此没有选择/下拉列表http://api.rubyonrails.org/classes/ActionView/Helpers/DateHelper.html#method-i-date_select

然后你把text_field绑定到keyUp事件并修改隐藏年份字段的值

最重要的问题是,如果用户禁用了javascript,则文本字段的值永远不会设置为隐藏字段,这是一个问题。

2 - 仅对日期和月份使用date_select和文本字段

我不确定您是否可以执行此选项,您可以尝试使用与上面相同的date_select,并使用年份字段的名称设置输入字段的名称。问题是date_select将放置一个具有该名称的隐藏字段,并且您将另一个具有相同名称的字段放在一起,并且在提交时发送的值可能不是您想要的...您应该看看它是否可行。

3 - 使用date_select并使用选择http://harvesthq.github.com/chosen/

添加额外功能

一如既往地设置date_select并设置所需的start_year和end_year,然后用选择的选择替换选择,选择的选择包括一个文本字段,用于在选择年份之间进行搜索

选择给你一个漂亮和一致的外观几乎crossbrowser(没有在旧的IE版本上测试它),你获得用户友好的文本输入,如果禁用javascript,用户仍然有三个选择。 / p>

我肯定会使用3号,但也许你不想添加插件。

答案 2 :(得分:0)

尝试使用Tom建议的Javascript路由,我提出了以下内容:

VolumeChargeCalc = function(meterSize, checkusage){
        console.log("Check usage value passed to function is = " + checkusage );
        if(meterSize <= 20) {
            console.log("METER SIZE HAS PASSED");
                if(checkusage == "Y") {
                    console.log("Check usage has been found");
                    return  [0.8042,0.8042,0.6879,0.6627];
                } else {
                    console.log("no check usage found " + checkusage);
                    return  [2.1442,0.8042,0.6879,0.6627];
                } 

        } else if(meterSize == 999){
            return [0.03035,0,0,0];
        } 
        else {
            return [0.8042, 0.8042, 0.6879, 0.6627];
        }
    }

(欢迎改进)