亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > HTML5 > 正文

HTML5利用約束驗證API來檢查表單的輸入數據的代碼實例

2024-09-05 07:21:53
字體:
來源:轉載
供稿:網友

HTML5對于表單有著極大程度的優化,無論是語義,小部件,還是數據格式的驗證。我猜你肯定會以瀏覽器兼容作為借口不愿意使用這些“新功能”,但這絕不應該成為使你停滯不前的原因,況且還有像Modernizr和ployfill這樣的工具庫幫助你在不支持Html5的瀏覽器上進行回退處理。當你真正試著使用這些表單的新功能時,我保證你會愛上它。如果說唯一的缺陷,就是提示框的樣式是瀏覽器默認的,你無法改變,好吧,如果你相信瀏覽器廠商的設計師的審美水平的話(我相信他們的設計水平比絕大部分普通人要好,如果不考慮風格兼容的話),抓緊學就對了!

原生驗證

input type

HTML5中為數據格式驗證提供了很多原生的支持,例如:

<input type='email'/>

當點擊提交按鈕時,如果你輸入的格式不符合email,則會導致無法提交,瀏覽器會提示你錯誤信息。

比如在chrome下:

注意:

1、僅當你提交的時候會觸發瀏覽器的驗證

2、不同瀏覽器提示信息的行為樣式不一樣

3、當有多個input不符合要求時,只會提示一個錯誤,一般會提示表單中相對較前的Input的

不要理所應當的認為當input的type等于tel的時候,如果你輸入的不是電話號碼格式,在提交時也會被瀏覽器的阻擋并提示錯誤信息,type=’tel’在PC端只起到語義的作用,在移動端可以使產生的鍵盤為純數字鍵盤,并不能起到數據驗證的作用。

pattern

你可以使用pattern屬性來對瀏覽器不提供原生驗證的數據格式設置自定義格式驗證。pattern屬性的值是一個正則表達式(字符串):

<input type='tel' pattern='[0-9]{11}' title='請輸入11位電話號碼'>

點擊提交時,如果你輸入的數據不符合pattern里面正則的格式,那么瀏覽器會阻止表單提交,并提示:‘請與所請求的格式保持一致’+ title里的內容(小字)。但注意,當你的文本框中內容為空的時候,瀏覽器不會對其進行檢查,會直接提交表單(因為瀏覽器認為這個框框不是必填項)。如果你想要這個框框必須有內容,請加上required屬性。

通過HTML原生的驗證系統,基本就能滿足我們對表單提交的限定。但HTML5提供了更高級的功能來方便我們開發和提升用戶體驗。

約束驗證API

默認提示信息

像‘請與所請求的格式保持一致’這樣的瀏覽器提示信息字串藏在input DOM對象的validationMessage屬性里,這個屬性在大多數現代的瀏覽器中是只讀的,即不可修改,比如下面的代碼:

<input type="text" required id='input'/>

當提交時,如果Input內容為空,那么瀏覽器會提示‘請填寫此字段’,我們可以在控制臺把這句話打印出來:

var input = document.getElementById('input')input.validationMessage // =>'請填寫此字段'

如果想修改其中的內容,可以調用setCustomValidity接口改變validationMessage的值

input.setCustomValidity('這個字段必須填上哦');// 下面這種做法適用于不支持setCustomValidity的瀏覽器,基本現代瀏覽器都不支持這樣做input.validationMessage = '這個字段必須填上哦'

注意,像required這樣的HTML原生驗證,雖然能改變其中信息,但無法把信息置為空字串,原因下面會講到。

原理

HTML表單驗證系統通過validationMessage屬性檢測該文本框的數據是否通過驗證,如果其值為空字串,則表示通過了驗證,否則,表示未通過,瀏覽器會把其值作為錯誤信息提示給用戶。所以在原生驗證時,用戶無法把validationMessage的值設置為空字符串。

約束驗證API的簡單實例

約束驗證API是在原生方法之上更靈活的表達方式,你可以自己設置數據是否通過,而不借助于正則表達式。原理很簡單,通過if判斷,如果數據格式使你滿意,那么你就調用setCustomValidity使validationMessage的值為空,否則,你就調用setCustomValidity傳入錯誤信息:

input.addEventListener('input', function () {        if(this.value.length > 3){ // 判斷條件完全自定義            input.setCustomValidity('格式不正確');        }else {            input.setCustomValidity('')        } });

每次鍵盤輸入,代碼都會判斷格式是否正確,然后調用setCustomValidity設置validationMessage的值。不要妄想每按下鍵瀏覽器都會提示你結果是否正確,瀏覽器只有在點擊提交按鈕的時候才會提示validationMessage里的值(如果有的話)。

如果你還沒有走思的話,一定會問,既然這樣,為什么要為input綁定鍵盤事件,每輸入一下都要進行判斷呢?直接為表單綁定提交事件,在提交時再判斷多好,別急,這么做是有好處的。

隨著輸入判斷格式與樣式

作為用戶,我們當然想在得知我輸入了錯誤的格式之后,文本框變紅(或者有別的提示)。而在我每次輸入一個字符,如果對了,文本框就恢復正常。我們可以使用CSS偽類來實現這個功能:

    input:required {            background-color: #FFE14D;        }    /*這個偽類通過validationMessage屬性進行判斷*/    input:invalid {        border: 2px solid red;    }

上面的required偽類會給所以必填但值空的input提供一個黃色的背景色,而下面的invalid偽類則會為所有未通過驗證的input添加一個2px的紅邊邊。我們現在給我們的Input框加上input類即可。

這些偽類的判斷條件正與瀏覽器判斷你能否提交表單的條件一樣,看validationMessage里的值,所以,我們上面設置每次鍵盤輸入事件都會觸發一次判斷從而改變CSS偽類樣式的渲染,用意正在于此。

更好的用戶體驗

還有一個缺點,就是當一個input設置為required的時候,在初始化時,因為其本身是空的,所以invalid偽類會對它起作用,這不是我們想看到的,因為我們什么還都沒有干。

我們可以并在這些偽類前加上父選擇器.invalid,這樣,只有在父元素具有invalid類時,這些偽類才會起作用。可以設置一個submit事件,在表單提交因驗證失敗后,會觸發input的invalid事件,給form添加invalid類:

form.addEventListener('invalid', function() {this.className = 'invalid'}, true)因為invaild是Input的事件,而不是form的事件,所以這里我們設置第三個參數為true采用事件捕獲的方式處理之。這樣,就大功告成了。

最終實例

好了,現在是時候總結一下我們所學的知識并創造最佳實踐了:

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>form</title>    <style>        input:required{            background-color: #DCD4CE;        }        .invalid input:invalid{            border: 2px solid red;        }    </style></head><body><form id="form">    <label>email:<input type="email" required id="email"></label>    <label>IDCard:<input required id="IDCard"></label>    <input type="submit" id="submit"></form><script>    var email = document.getElementById('email');    var IDCard = document.getElementById('IDCard');    var form = document.getElementById('form');    IDCard.addEventListener('input', function () {        if(this.value.length != 6) {            this.setCustomValidity('IDCard的長度必須為6')        }else{            this.setCustomValidity('')        }    });    form.addEventListener('invalid', function () {        this.className = 'invalid';    }, true)</script></body></html>

運行后截圖如下:

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产色婷婷国产综合在线理论片a| 在线看欧美日韩| 国产精品一二三在线| 热久久视久久精品18亚洲精品| 亚洲成人999| 久久影视电视剧免费网站| 亚洲人成在线播放| 国产精品久久久久久久一区探花| 欧美精品在线极品| 在线观看欧美日韩| 欧美激情视频一区二区| 欧美国产第二页| 欧美性猛交xxxx| 亚洲一级黄色av| 欧美性受xxxx黑人猛交| 91天堂在线观看| 国产午夜精品美女视频明星a级| 国产精品免费小视频| 久久国产精品偷| 亚洲免费视频观看| 欧美综合激情网| 国内精品美女av在线播放| 少妇高潮久久久久久潘金莲| 一区二区三区视频免费在线观看| 91在线直播亚洲| 欧美激情三级免费| 欧美黑人性猛交| 日韩国产精品亚洲а∨天堂免| 91精品国产综合久久香蕉的用户体验| 色诱女教师一区二区三区| 韩日精品中文字幕| 在线视频免费一区二区| 欧美中文在线字幕| 97视频在线观看免费| 91在线观看免费高清完整版在线观看| 国产精品h在线观看| 欧美日韩国产在线看| 日韩欧美a级成人黄色| 久久夜色精品国产| 欧美体内谢she精2性欧美| 国产日韩精品一区二区| 91免费观看网站| 亚洲 日韩 国产第一| 亚洲一区二区久久| 亚洲性猛交xxxxwww| 日韩成人中文字幕在线观看| 成人羞羞国产免费| 色综合天天综合网国产成人网| 国产日韩欧美综合| 中文字幕亚洲在线| 91久久久精品| 51精品国产黑色丝袜高跟鞋| 这里只有精品久久| 国产精品高清在线| 久久久午夜视频| 狠狠做深爱婷婷久久综合一区| 尤物99国产成人精品视频| 日韩免费在线免费观看| 久久久999精品| 黑人巨大精品欧美一区二区三区| 91精品国产91久久久久久久久| 97视频免费观看| 欧美日韩国产一区二区三区| 91禁外国网站| 久久久久免费精品国产| 亚洲**2019国产| 国产精品久久久久久久久久久久| 亚洲欧洲高清在线| 51久久精品夜色国产麻豆| 精品国产乱码久久久久酒店| 精品少妇一区二区30p| 日韩成人网免费视频| 亚洲网站在线观看| 91午夜理伦私人影院| 欧美精品在线极品| 91久久精品国产91性色| 亚洲国产欧美一区二区三区久久| 精品亚洲永久免费精品| 一区二区三区四区视频| 国产精品美女网站| 国产精品无av码在线观看| 欧美国产激情18| 国产精品一区二区三区久久| 狠狠躁天天躁日日躁欧美| 国产精品日韩专区| 国产97在线播放| 岛国av一区二区三区| 日韩亚洲欧美中文高清在线| 久久久久久国产精品久久| 国产精品久久久久7777婷婷| 亚洲aa中文字幕| 国内精品久久久久久久| 亚洲国产精品久久久久秋霞蜜臀| 夜夜嗨av色一区二区不卡| 亚洲第一男人av| 欧美日韩国产成人在线| 中日韩美女免费视频网址在线观看| 色综合久久悠悠| 欧美性猛xxx| 亚洲人精选亚洲人成在线| 国产精品福利小视频| 久久久久久久久久久91| 美女av一区二区| 欧美一级大片在线免费观看| 欧美美最猛性xxxxxx| 国产精品中文久久久久久久| 欧美成年人视频网站欧美| 精品欧美aⅴ在线网站| 国模gogo一区二区大胆私拍| 欧美激情视频播放| 欧美另类暴力丝袜| 日韩久久精品电影| 欧美精品免费在线| 亚洲丝袜在线视频| 久久免费福利视频| 国产精品久久久久久超碰| 欧美激情性做爰免费视频| 久久精品国产精品亚洲| 国产日韩换脸av一区在线观看| 国产日韩精品在线观看| 亚洲精品久久久久久久久久久| 国产精品99久久久久久久久久久久| 亚洲一区二区久久| 国产香蕉97碰碰久久人人| 国产欧美日韩精品丝袜高跟鞋| 国产成人一区二区三区小说| 一本色道久久综合狠狠躁篇的优点| 欧美视频专区一二在线观看| 国产亚洲福利一区| 亚洲国产日韩欧美在线动漫| 欧美日韩一区二区三区在线免费观看| 国产日本欧美一区二区三区| 欧美xxxx14xxxxx性爽| 原创国产精品91| 亚洲福利视频在线| 久久青草福利网站| 丝袜美腿精品国产二区| 国产精品美女久久久久久免费| 97视频在线播放| 伊人久久久久久久久久久| 国产精品亚洲第一区| 在线播放日韩欧美| 日韩免费在线视频| 久久精品成人一区二区三区| 中日韩美女免费视频网址在线观看| 日韩电影免费观看在线| 国产不卡一区二区在线播放| 成人黄色片网站| 日韩电影视频免费| 91爱爱小视频k| 精品国产一区二区三区久久久| 精品中文字幕在线2019| 亚洲毛片在线免费观看| 国产精品欧美一区二区| 日韩小视频网址| 日本精品久久久| 欧美一区在线直播| 亚洲精品v天堂中文字幕| 久久久久久中文| 久久影院资源网| 久久九九国产精品怡红院| 欧美在线免费观看| 久久久av一区| 亚洲裸体xxxx|