Google Chrome 的輸入資訊 [type=date] 常見問題

  • 本文由 Chrome 軟體工程師 Kent Tamura 撰寫。

您可能已經注意到,Google Chrome 自 20 版起就支援日期選擇器。只要將 input 元素的 type 屬性設為 date,使用者就能按一下箭頭按鈕,讓 Chrome 彈出漂亮的月曆小工具。

我們收到許多開發人員的意見回饋,在此提供幾項資訊,說明如何充分運用本文中的日期挑選器。

語言代碼對輸入值的日期格式有何影響?

使用者可以輸入日期值至 input[type=date] 的文字欄位,並在方塊中以灰色文字顯示日期格式。這個格式可透過作業系統設定取得。

日期格式畫面

由於目前無法指定格式,因此網頁作者無法變更日期格式,

傳送至伺服器時,輸入值如何表示?

在 HTTP 要求中,從 input[type=date] 解讀的日期值 (例如 GET / POST) 將採用 yyyy-mm-dd 格式。

輸入值會傳回哪種格式?

無論呈現格式為何,input.value 一律會傳回 yyyy-mm-dd

輸入值接受哪種格式?

以程式輔助方式設定 input.value 時,無論初始值和 JavaScript 插入值的呈現格式為何,值都只接受 yyyy-mm-dd 樣式。

如何變更日期挑選器的外觀?

您目前無法為日期挑選器設定外觀樣式。在 WebKit 中,我們之前提供過方法,使用 -webkit-appearance CSS 屬性或 ::-webkit-foo 虛擬類別選取器設定表單控制項樣式。不過,日曆彈出式視窗在 WebKit 中並未提供這類方法,因為它與文件不同 (例如 <select> 的彈出式選單),且目前沒有控制子元素樣式設定的標準。

如何避免 jQuery Datepicker 與原生日期挑選器發生衝突?

如果您在 Google Chrome 中使用 jQuery Datepicker 的 input[type=date],可能會發現 jQuery UI 和原生日曆彈出式視窗的月曆重疊。如果您要在所有平台上套用 jQuery 日期挑選器,請使用 input[type=text],而非 input[type=date]。除了 Google Chrome,iOS Safari、BlackBerry 瀏覽器和 Opera 也都有自己的 input[type=date] 使用者介面,目前無法透過 input[type=date] 在所有平台上實現統一的使用者介面。如果只想在不支援 input[type=date] 的平台上套用 jQuery 日期挑選器,可以使用 Modernizr 或下列程式碼:

var isDateInputSupported = function(){
var elem = document.createElement('input');
elem.setAttribute('type','date');
elem.value = 'foo';
return (elem.type == 'date' && elem.value != 'foo');
}

if (!isDateInputSupported())  // or.. !Modernizr.inputtypes.date
    $('input[type="date"]').datepicker();