2012-03-02 36 views
0

在我看來,我有兩個日期字段,像這樣:Rails 3/javascript - 動態重新計算字段作爲輸入變化?

<%= f.text_field :start_date %> 
<%= f.text_field :end_date %> 

(我使用jQuery UI的日期選擇器設定日期,但出於離開那個代碼爲清楚起見日期被存儲在數據庫中。爲「2012-03-02」)

我計算與一個輔助方法的兩個日期之間的差異,並顯示爲#duration

<div id="duration"> 
    <%= time_diff_in_natural_language(@project.start_date, @project.end_date) %> 
</div> 

可正常工作 - 它計算之間的區別這兩個日期存儲在數據中基礎。但我真的很喜歡持續時間重新計算 - 我猜這將通過日期字段上的javascript onchange();事件觸發重新計算duration字段中的內容,但我堅持如何實現它。任何人都可以指出我完成這個任務的好方法嗎?

This question過程非常類似,我認爲這個問題的答案可以在這裏工作過,但我無法弄清楚如何正確顯示時間差,因爲這將有參考軌道的輔助方法。)

回答

0

一個方法是做一個ajax調用來獲得持續時間。

所以在你的控制器中,你會定義一個名爲'duration'的動作,例如查找兩個參數:start_date和end_date,並簡單地調用你的幫助器方法time_diff_in_natural_language。東西的線路:

def duration 
    time_diff_in_natural_language(params[:start_date], params[:end_date]) 
end 

然後你就可以將你的日期選擇器的onSelect事件(或輸入的onChange事件)來調用javascript函數,這隻會令Ajax調用到「持續時間「操作,並在成功時設置#duration。類似這樣的:

function get_duration() { 
    $.ajax({ 
     url: '/duration', 
     dataType: "json", 
     type: "POST", 
     data: { start_date: $("#project_start_date").val(), end_date: $("#project_end_date").val() }, 
     success: function(result) { $("#duration").text(result); } 
     } 
    }); 
} 

以上只是您如何解決這個問題的一個例子。

+0

這似乎應該工作,但我不能得到它 - 雖然我沒有使用ajax很多,所以我可能只是失去了一些明顯的東西。我最終定義了一個jQuery函數來計算時間差異,然後調用onchange()完全繞過rails方法。 – ellawren 2012-03-08 21:27:16