2014-10-28 57 views
3

我有我的網頁上的格式如下:熱得到不完整的日期時間,本地輸入值

<input id='startDate' type='datetime-local' step=1 name='startDate'> 

我用這個代碼來獲取字段的值:

var start = $('#startDate').val(); 

我的問題是輸入字段的值保持不確定狀態,直到其中的每個部分都被填寫完爲止,包括小時,分鐘,秒和AM/PM。我希望能夠從表格中獲得價值,只要選擇一年即可。

我該如何去做這件事?我很樂意將未填寫的值清零,但我無法弄清楚如何獲取用戶填寫的datetime-local部分。

我知道我可以使用timepicker addon爲jQuery UI的datepicker做到這一點,但我並不想走這條路 - 我更喜歡Chrome的實現。

+0

它不可能得到AM/PM它是一個ISO日期格式(意思是24小時制),所以你必須把它轉換... – Endless 2014-10-28 18:15:34

+0

jQuery的.VAL()已經做了我的轉換。我遇到的問題是日期時間不完全合格。 – 2014-10-28 18:18:17

回答

1

W3C Date State spec定義了消毒算法:

  • 值消毒算法如下:如果元素的值不是有效的日期字符串,然後將其設置爲空字符串來代替。

每當設置輸入元素的值被調用,如DOM input value spec定義:

  • 在獲取時,必須返回該元素的當前值。在設置時,如果元素的類型屬性的當前狀態定義爲 之一,那麼必須將該元素的值設置爲新值,將 元素的髒值標誌設置爲true,調用值清理 算法,然後,如果元素有一個文本輸入光標位置,如果 將文本輸入光標位置移動到文本字段的末尾, 取消選擇任何選定文本並將選擇方向重置爲 無。

所以value屬性將始終是一個空字符串時的日期是無效的。畢竟,它似乎沒有指定「原始/髒/用戶鍵入的文本值」的任何屬性,因爲它不是文本輸入。

IMO這是一件好事,它有利於表單驗證爲無效日期將被視爲falsy值(空字符串),但它也使瀏覽器更加自由地實施日期輸入的UI。

+0

我可以在事件達到清理算法之前捕獲事件,以便手動將其強制爲有效的日期字符串?我很樂意用onchange做這樣的事情,即使這意味着向用戶顯示日期時間未填充部分的默認值。 – 2014-10-28 18:13:05

+0

輸入是本地知道mening我會看到一個24小時的時鐘,而你可能會看到一個12小時和AM/PM選項。所以我認爲它最好是獨立的 – Endless 2014-10-28 18:21:40

+0

然而,你可以禁用驗證,並自己做,但你可以獲取input.value的時間已經是有效的 – Endless 2014-10-28 18:22:26

相關問題