您好,登錄后才能下訂單哦!
HTML5實戰應用:如何讓表單驗證更友好
HTML5表單驗證給前端人員帶來了便利,但是在用戶體驗上存在一些缺陷,默認的提示對用戶很不友好,無法準確的獲取想要的信息。好在大牛們在接口設計的時候提供了setCustomValidilty方法可以自定義提示信息。這是一個好消息,但也存在一些弊端,需要讓開人員做額外的一些處理才達到真正想要的目的。
接下來通過以下示例來闡述方法的應用。
未調用setCustomValidity)方法!DOCTYPE html>
html
hea
ata charset="utf-8
titleform test/title>
/head
body
form name="test action="" method="post>
input type="text" required pattern="^\d{4[ DISCUZ_CODE_21 ]quot; placeholder="請輸入代碼" >
button type="submit">Check/button>
/form>
/body>
/html>
復制代碼執行結果:
A:未輸入數據
B:不匹配
這兩個結果都匹配了。但是不匹配這里的提示方案案與預想的不符合。
通過調用setCustomValidity方法來優化提示文案!DOCTYPE html>
html>
head>
mata charset="utf-8">
title>form test/title>
/head>
body>
form name="test" action="." method="post">
input type="text" required pattern="^\d{4}[ DISCUZ_CODE_22 ]quo; placeholder="請輸入代碼" >
button type="submit">Check/button>
/form>
script type="text/javascript">
document.querySelector"input").setCustomValidity("請輸入4位數字的代碼");
/script>
/body>
/html> 復制代碼執行結果:
A:為空
B:不合法
C:合法
從三個操作來看,調用了setCustomValidity方法后,原生的表單驗證羅輯都返回false了。悲劇。
再看看接口屬性的變化
調用之前:
A)
B)
C)
調用之后:
A)
B)
C)
從上面的截圖可以看到validationMessage沒清空,valueMissing和patternMismatch都已經驗證通了。
總結一下:
從面上可以看出,驗證通過與否除了跟validity接口下的屬性相關外,還跟validationMessage是否有值有關系。只有當validity接口下的屬性(customError除外)都為false并且validationMessage為空時才算驗證通過。
優化后的代碼:!DOCTYPE html>
html>
head>
mata charset="utf-8">
title>form test/title>
/head>
body>
form name="test" action="." method="post">
input type="text" required pattern="^\d{4}[ DISCUZ_CODE_23 ]quot; oninput="out(this)" placeholder="請輸入代碼" >
button type="submit">Check/button>
/form>
script type="text/javascript">
function out(i){
var v=i.validity;
if(true===v.valueMessing){
i.setCustomValidity("請填寫些字段");
}else{
if(true===v.patternMismatch){
i.setCustomValidity("請輸入4位數字的代碼");
}else{
i.setCustomValidity("");
}
}
}
/script>
/body>
/html>
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。