2014-10-17 90 views
0

對於我正在開發的網站,我使用表單來更新模型的不同字段。要更新的JavaScript結束日期更改開始日期的日期

其中一些字段需要根據其他值進行更新。例如,任務的每個實例都有一個開始日期,結束日期和長度,它們必須驗證以下內容:End = Start + Lenght(週末不算在內,但這是次要問題)。

所以我想寫會做的功能之一:

When the user changes the value of the input Start_date 
Get that date from the input field 
Get the value of the field Lenght 
Update the value of the input "End date" with (Start_date + Lenght) 

通過我的例子中涉及的三個輸入有以下ID:id_start,id_lenght,id_finish。

這裏是我寫的,但它在所有不工作(沒有發生明顯的...):

<script> 
    $("#id_start").change(function() { 
     var start = new Date(); 
     var finish = new Date(); 
     var numberOfDays = document.getElementById('id_lenght').value; 
     start = document.getElementById('id_start').value; 
     finish.setdate(start.getDate()+document.getElementById('id_lenght')) 
     $('#id_finish').val(finish); 
    }); 
</script> 

在溶液中的任何暗示,使其工作將非常感激。 在此先感謝。

+0

Knockout.js將是完美的工作。您可以數據綁定元素並定義它們之間的可計算關係。 http://knockoutjs.com/將它與MomentJS結合起來,你也可以輕鬆地進行日期操作。 http://momentjs.com/ – 2014-10-17 12:24:57

+0

如果'$(「#id_start」)'是''使用'keyup'或'blur'事件。 – 2014-10-17 12:28:14

+0

@Burn你的意思是改變事件不適用於輸入元素? – Emeric 2014-10-17 12:30:32

回答

1

讓我們來看看你的代碼實際上在做什麼。

var start = new Date(); 

在這裏,您將創建一個新的Date對象。

start = document.getElementById('id_start').value; 

在這裏,你的start值更改爲用id =「id_start」的DOM元素的值。問題是,這個值不是Date對象。即使是新的HTML Date輸入類型(它不受Firefox或IE支持)只會在您提取值時爲您提供字符串。所以你已經創建了一個新的Date對象,然後立即拋出它。

所以現在開始不是Date,而是string。在這一行:

finish.setdate(start.getDate()+document.getElementById('id_lenght')) 

你試圖調用一個字符串對象的不確定.getDate(),所以你會得到一個錯誤。

以下是您需要做的事情。該字符串(假設它是ISO格式:YYYY-MM-DDYYYY-MM-DDTHH:MM:SS)可用於創建新日期。

start = new Date(document.getElementById('id_start').value); 

現在開始實際上是一個日期對象,您可以添加以天爲單位的長度來獲得結束日期。

當然,您需要確保輸入的格式是可接受的!有很多'日期選擇器'選項(例如jQueryUi,有一個日期選擇器),如果你只對支持Chrome感興趣,那麼這些工作很好。

+0

這很有道理。但是我的日期格式不是ISO,我使用'dd/mm/yyyy'。有沒有辦法修改你的線路來考慮它? (我正在考慮像Django的_ |日期:「d-m-Y」_) – Emeric 2014-10-17 13:14:29

+0

@Emeric,您可以使用jQuery dateFormat插件作爲一個選項。有關相關問題,請參閱:http://stackoverflow.com/questions/5250244/jquery-date-formatting。 – 2014-10-17 13:19:08

+0

謝謝。我也注意到你提到了DatePicker,我也在這裏使用它。我已經對datepicker行進行了註釋,以便處理這個新函數,但是當我取消註釋DatePicker函數時,我注意到eventlistener Change不再起作用,並且也不模糊或關閉...... – Emeric 2014-10-17 13:23:53

相關問題