2012-11-16 37 views
2

我正在创建一个带有日期字段的祖先类型网页,该日期字段允许用户输入返回到你的数字的日期。这使得date_select与下拉框和jquery datepicker非常不友好。年份文本框可以有date_select吗?

有没有人知道一个很好的方式来显示一年的文本框,但一个月和一天的下拉?

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

感谢您给我的任何帮助!

回答

0

我三个选项

1 - 仅使用了日,月,并与一些JavaScript年度

Date_select文本字段的date_select之间选择接受:discard_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和使用Choosen http://harvesthq.github.com/chosen/

把date_select一如既往,并设置你想要的START_YEAR和END_YEAR,然后用choosen选择替代选择添加额外的功能,已选定的选择包括一个文本字段在选择的年份之间进行搜索

Choosen为您提供了一个不错的一致性外观(没有在旧IE版本上测试过),您可以获得用户友好性的文本输入,并且如果JavaScript被禁用,用户仍然有三个选择。

我会definitelly使用数字3,但也许你不想添加一个插件。

+0

如果Choosen on Rails的选项的提高,那么这就是要走的路当然。我在考虑你的#2选项,但得出的结论是很多工作,因为你必须同时处理'new'和'edit'的情况。对于一个简单的微创JS解决方案,我认为改变字段类型应该像我的答案一样工作。 –

+0

arieljuod - 使用插件的负面影响是什么? –

+0

我不认为这有什么负面影响,我说,也许你不想使用插件,因为我不知道你是否想要这样做(有些人可能更喜欢实现他们需要优化代码的东西符合他们的要求)。试试吧(这很容易),看看它是否符合你的需求。 – arieljuod

1

随着到了Rails的开发者非常尊重,在date_select可用性是几乎任何情况下:-)

与其他字段类型相当薄弱,date_select助手生成具有特殊名称和ID,每一个三个select标签为年,月和日元素。这是命名约定,它允许控制器代码在处理params阵列时自动奇迹地将输入重组为一个(单个)日期。

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

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

0

与汤姆建议JavaScript的路线进行实验,我想出了类似以下内容:

<%= f.date_select :birth_date %> 
<script> 
    var date_field = 
     document.getElementsByName('ancestor[birth_date(1i)]')[0]; 
    var new_html = '<%= 
     f.text_field 'birth_date(1i)', :value=>(f.object.birth_date.strftime("%Y") rescue "") %>'; 

    date_field.outerHTML = new_html;   
</script> 

(改进欢迎)

相关问题