HTML5制定了一組通用的屬性及方法,利用這些特性就可以做表單驗證。除了通用的表單元素,一些特殊的表單元素還會內建預設的驗證邏輯。今天先來看一下表單驗證機制怎麼使用,另外要回頭檢視一下HTML5規格書中4.10所提到的所有表單元素,有哪些有特殊的規則。
通用的驗證機制
HTML5制定了幾個驗證機制:
設定好必要屬性後,使用checkValidity()方法就可以進行驗證。如果傳回值是true,那表示驗證無誤,如果是false,那表示驗證有問題。驗證有問題時,會觸發"invalid"事件,所以也可以透過這個方式顯示驗證的問題。(但是目前一些瀏覽器還沒支援這個事件)
要確定是哪個部份的驗證出問題,可以利用表單元素的validity屬性來檢查。validity物件的定義如下:
interface ValidityState {
readonly attribute boolean valueMissing;
readonly attribute boolean typeMismatch;
readonly attribute boolean patternMismatch;
readonly attribute boolean tooLong;
readonly attribute boolean rangeUnderflow;
readonly attribute boolean rangeOverflow;
readonly attribute boolean stepMismatch;
readonly attribute boolean customError;
readonly attribute boolean valid;
};
稍微說明一下:
透過這樣的方式,就可以省去許多寫程式驗證表單的的功夫,利用表單內建的驗證機制,就能把大部分驗證的功能做出來。即使不足,他也提供了setCustomValidity()來讓客製化的驗證可以與驗證API結合。
例外的元素
keygen雖然屬於表單元素,但是無法對他做驗證。keygen產生的key pair資訊,是在表單實際傳送時才會產生的,無法透過Javascript等程式取得值。(目前測試過是這樣)另外,HTML5規格書也明確規定,表單驗證相關的API不可使用於keygen。
另外,output及fieldset,他的作用是與表單協作,所以也不可做驗證。
最後,寫了一個簡單的表單驗證測試,不過只能在Opera瀏覽器執行:
http://gist.github.com/645287
明天來看Drag and Drop吧。