1. 程式人生 > >html 表單驗證自定義錯誤提示

html 表單驗證自定義錯誤提示

引言

通常情況下,我們在進行表單驗證時(比如提交登入註冊資訊),為了安全考慮以及進一步保證表單資訊填寫的正確性,會再服務端驗證之前,在前端頁面先做一次驗證。但是瀏覽器預設的表單填寫錯誤資訊並不是我們所期望的,因此需要自定義錯誤資訊。

表單如下:

<input id="username" name="username" type="text" placeholder="使用者名稱" maxlength="10"
       pattern="^[a-zA-Z][a-zA-Z0-9_]{0,}" required>
<input type="submit" value="註冊">

預設的表單提示

情況1

當用戶名為空時,瀏覽器提示如下圖:
預設情況1

此時 input 的 validationMessage 和 validity 打印出來是:

validationMessage: ‘請填寫此欄位。’
patternMismatch: false
valid: false
valueMissing: true

這種情況我們一般不做修改;

情況2

當用戶名填寫 123 不符合預設正則表示式時,瀏覽器提示如下圖:
預設情況2
此時 input 的 validationMessage 和 validity 打印出來是:

validationMessage: ‘請與所請求的格式保持一致。’
patternMismatch: true
valid: false
valueMissing: false

但我們往往想按照自己的意願向用戶提示的更精準一些,這時就需要自定義錯誤提示了;

情況3

當用戶名填寫符合預設正則表示式時:
此時 input 的 validationMessage 和 validity 打印出來是:

validationMessage: ‘’
patternMismatch: false
valid: true
valueMissing: false

直接跳轉,也不需做處理。

自定義的表單提示

在 username input 下新增獲得使用者輸入時執行的指令碼:

oninput="checkOnInput(this, 'custom tip')"
function
checkOnInput(input, tip) { input.setCustomValidity(tip); }

情況1

當用戶名為空時,瀏覽器提示如下圖:
自定義情況1
此時 inpu t的 validationMessage 和 validity 打印出來是:

validationMessage: ‘custom tip’
patternMismatch: false
valid: false
valueMissing: true

這種情況我們一般不做修改;

情況2

當用戶名填寫 123 不符合預設正則表示式時,瀏覽器提示如下圖:
自定義情況2
此時 input 的 validationMessage 和 validity 打印出來是:

validationMessage: ‘custom tip’
patternMismatch: true
valid: false
valueMissing: false

但我們往往想按照自己的意願向用戶提示的更精準一些,這時就需要自定義錯誤提示了;

情況3

當用戶名填寫符合預設正則表示式時,瀏覽器提示如下圖:(與情況2相同)
自定義情況3
此時 input 的 validationMessage 和 validity 打印出來是:

validationMessage: ‘’
patternMismatch: false
valid: false
valueMissing: false

不跳轉,所以上述處理不正確。

自定義的表單提示,提示內容為空

在 username input 下新增獲得使用者輸入時執行的指令碼:

oninput="checkOnInput(this, '')"
function checkOnInput(input, tip) {
    input.setCustomValidity(tip);
}

經過測試,與預設的表單提示情況相同。

綜上所述

自定義錯誤提示,當輸入框填寫為空或者正確時,列印的資料和預設提示有明顯區別,與我們所期望的也相差很大。
因此設定自定義錯誤提示可以根據 patternMismatch 的值判斷,是情況1、3時,預設處理;是情況2時,自定義處理。

處理辦法

在 username input 下新增獲得使用者輸入時執行的指令碼:

oninput="checkOnInput(this, 'custom tip')"
function checkOnInput(input, tip) {
    if (input.validity.patternMismatch === true) {
        input.setCustomValidity(tip);
    } else {
        input.setCustomValidity('');
    }
}

這樣就可以只在輸入錯誤的時候按照我們的意願來提示啦。