2016-04-15 98 views
0

我是新來的HTML5和Knockout.js我面臨的問題在日期時間本地控制。Html5的日期時間本地控制顯示不完整的日期

這裏是我使用

<script type="text/html" id="DATE.template"> 
    <input type="datetime-local" data-bind="value: Prompt.CurrentValue, enable: Prompt.IsEnabled, valueUpdate: 'input'" /> 
</script> 

這裏是保存按鈕的HTML日期時間控制和它綁定到savecommand到JavaScript文件。

<div class="buttons-wrapper"> 
       <button class="button save-idoc-button" data-bind="command: SaveIdocCommand, activity:SaveIdocCommand.isExecuting">Save</button> 
       <button class="button cancel-save-button" data-bind="command: CancelIdocCommand, activity:CancelIdocCommand.isExecuting">Cancel</button> 
      </div> 

當我在沒有輸入任何時間的情況下輸入日期時,日期在保存時傳遞爲空。我知道這是一個不完整的日期,因此瀏覽器認爲它是無效的日期,但輸入的日期不會被保存。所選日期綁定到Prompt.CurrentValue;當用戶輸入一個不完整的日期(沒有時間)時,prompt.currentvalue爲空,並且我在datetime控件上得到一個工具提示消息,「請輸入輸入的有效日期或日期不完整」。 (瀏覽器驗證,並提供我認爲)

什麼是最好的方法? a。我們是否需要提供自定義驗證並禁用SAVE按鈕,直到datetime-local控件具有有效值。如果是這樣,我們如何在html5/knockout.js中實現?

b。是否有辦法禁用瀏覽器驗證datetime-local控件,以便即使未輸入時間也可以傳遞日期。? (我嘗試使用「無效」,但它不起作用)

c。任何其他更好的方法?

編輯:

這裏是viewmodel驗證的計算觀察值; Prompt.CurrentValue是綁定到UI控件的值。當它是日期控制時,此驗證錯誤不起作用。

> hasValidationErrors = ko.computed(function() { 
>      //loop through fields and filter out fields that are set up with validation and has invalid data. 
>      var invalidFieldsArray=ko.utils.arrayFilter(fields(), function (field) { 
>       return !_.isUndefined(field.Prompt) && !_.isNull(field.Prompt) 
>         && (
>           ((_.has(field.Prompt.CurrentValue,"isValid"))&&!field.Prompt.CurrentValue.isValid()) 
> 
>           || 
>           ((_.has(field.Prompt.AdditionalData, "isValid")) && !field.Prompt.AdditionalData.isValid()) 
>          ); 
>      }); 
>      return invalidFieldsArray.length > 0;; 
>     }) 

該所選日期時間本地值不綁定(爲相應的視圖模型:Prompt.CurrentValue),直到用戶選擇的日期,並進入全職...我明白的瀏覽器這個控件的驗證。計算的觀測值如何識別日期控制的無效性? (直到值有效時才通過值)

+0

你可以發佈一些示例代碼片段,演示這個問題? –

+0

發佈了日期時間控制的代碼.. – Balaji

回答

0

有幾件事 - 如果您要將表單提交給服務器,您的<input需要名稱屬性才能正確保存。如果你想要的話,你可以預設它爲當前值。 <input name="date" etc

如果你需要幫助,你需要顯示你的viewModel。

重新驗證 - 一個簡單的谷歌搜索顯示了該驗證套件https://github.com/Knockout-Contrib/Knockout-Validation

然而,在Javascript中任何與日期(日期驗證,日期顯示,日期改造的探討),你應該使用Moment.js

做編輯:

當我有機會時,將看看你的代碼。請注意價值對於日期輸入不是很好的約束。我建議你換

data-bind="value: Prompt.CurrentValue, enable: Prompt.IsEnabled, valueUpdate: 'input'" 

data-bind="textInput: Prompt.CurrentValue, enable: Prompt.IsEnabled" 

編輯2:

好了,日期,時間在任何版本的Firefox,IE或Safari不支持 - 這是純文本輸入。

退房https://github.com/Knockout-Contrib/Knockout-Validation/wiki/Native-RulesKnockout date validation not working correctly,但我認爲最好切換到moment.js(isValid())並堅持使用特定格式的日期字符串或使用jquery樣式的彈出日曆。

+0

我們使用knockout.js,並注意到在視圖模型中使用knockout庫的所有屬性(使用計算的observable)都具有一般驗證。但是,這個日期時間本地值不綁定(直到相應的viewmodel值),直到用戶選擇日期並輸入全部時間...我明白瀏覽器對此控件進行驗證。計算的觀測值如何識別日期控制的無效性? (因爲直到值有效纔會傳遞值) – Balaji

0

有沒有一種方法來禁用日期時間本地控制的瀏覽器驗證,因此該日期可即使時間不進入

如果進行傳遞,您可以使用<input type="date">組合而<input type="time">取而代之? (並使用textInput綁定,而你在它)