2012-11-16 62 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> 

(改進歡迎)

相關問題