日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

使用 JavaScript 進行即時表單驗證

瀏覽:191日期:2023-11-12 15:57:35

HTML5引入了幾個新的屬性來實現(xiàn)基于瀏覽器的表單驗證。 pattern屬性是一個正則表達式,用于定義textarea元素和大多數(shù)input元素類型的有效輸入范圍。 required 屬性指定某個字段是否需要輸入。 對于沒有實現(xiàn)這些屬性的傳統(tǒng)瀏覽器,我們可以使用它們的值作為填充表單的基礎(chǔ)。 我們還可以使用它們來提供更有趣的增強功能 - 即時表單驗證。

來自作者的更多內(nèi)容 一個JavaScript可訪問性的失敗實驗的經(jīng)驗教訓(xùn) 可用的多個元素的拖放

我們必須非常小心以避免得意忘形,創(chuàng)建過于侵略性的表單驗證,打破了自然的瀏覽行為,給用戶造成麻煩。 例如,我見過無法使用Tab鍵跳出無效字段的表單 - JavaScript被使用(或者被 濫用 )來強制焦點留在字段中直到有效為止。 這是非常糟糕的可用性,并且直接違反了 可訪問性準(zhǔn)則 。

我們在本文中要做的是更少的侵入性。 它甚至不是完整的客戶端驗證 - 它只是一個微妙的可用性增強,以可訪問的方式實現(xiàn),(正如我在測試腳本時發(fā)現(xiàn)的)幾乎完全相同于Firefox的原生功能。

基本概念

在最新版本的Firefox中,如果必填( required )字段為空,或者其值與模式( pattern )不匹配,那么該字段將顯示一個紅色的輪廓,如下圖所示。

使用 JavaScript 進行即時表單驗證

當(dāng)然,這種情況不會馬上發(fā)生。如果是這樣的話,則默認(rèn)情況下,每個必填字段都將具有該輪廓。相反,這些輪廓僅在您與該字段進行交互 之后 顯示,這基本上(盡管不是精確)類似于onchange事件。

所以這就是我們要做的,使用onchange作為觸發(fā)事件。作為替代方案,我們可以使用oninput事件,一旦任何值被輸入或粘貼到該字段中即可觸發(fā)。但這實在是 太 快了,因為它很容易在打字時快速地觸發(fā)和關(guān)閉,產(chǎn)生一種閃爍的效果,這將使一些用戶感到討厭或不可避免地分散了用戶的注意力。而且,在任何情況下,oninput不會從程序輸入中觸發(fā),而onchange會,而且我們可能還需要它處理像第三方插件那樣的自動完成的事情。

定義HTML和CSS

讓我們看一看我們的實現(xiàn),從它的HTML開始:

<form action='#' method='post'> <fieldset> <legend><strong>Add your comment</strong></legend> <p> <label for='author'>Name <abbr>*</abbr></label> <input aria-required='true' name='author'pattern='^([- wdu00c0-u024f]+)$'required='required'size='20'spellcheck='false' type='text'value=''> </p> <p> <label for='email'>Email <abbr>*</abbr></label> <input aria-required='true' name='email'pattern='^(([-wd]+)(.[-wd]+)*@([-wd]+)(.[-wd]+)*(.([a-zA-Z]{2,5}|[d]{1,3})){1,2})$' required='required'size='30'spellcheck='false' type='email'value=''> </p> <p> <label for='website'>Website</label> <input name='website'pattern='^(http[s]?://)?([-wd]+)(.[-wd]+)*(.([a-zA-Z]{2,5}|[d]{1,3})){1,2}(/([-~%.()wd]*/*)*(#[-wd]+)?)?$'size='30'spellcheck='false' type='url'value=''> </p> <p> <label for='text'>Comment <abbr>*</abbr></label> <textareaaria-required='true'cols='40' name='text'required='required'rows='10'spellcheck='true' ></textarea> </p> </fieldset> <fieldset> <button name='preview' type='submit'>Preview</button> <button name='save' type='submit'>Submit Comment</button> </fieldset></form>

這個例子是一個簡單的評論表單,其中一些字段是必需的,一些是需要驗證的,一些是二者都有的。 具有 required屬性的 字段也具有aria-required屬性,這為那些不了解新的input類型的輔助技術(shù)提供了回退語義。

ARIA規(guī)范 還定義了aria-invalid屬性,這就是我們將要用來指示字段何時無效(HTML5中沒有等效屬性)的屬性。 aria-invalid屬性顯然提供了可訪問的信息,但它也可以用作CSS鉤子來應(yīng)用紅色輪廓:

input[aria-invalid='true'], textarea[aria-invalid='true'] { border: 1px solid #f00; box-shadow: 0 0 4px 0 #f00;}

我們可以只使用box-shadow,而不是border,坦率地說,這看上去更好,但是不支持box-shadow的瀏覽器將不會顯示,比如IE8。

閱讀現(xiàn)代JavaScript 跟上不斷變化的的JavaScript世界

使用 JavaScript 進行即時表單驗證 開始閱讀

添加JavaScript

現(xiàn)在我們已經(jīng)有了靜態(tài)代碼,我們可以添加腳本。 我們首先需要的是一個基本的addEvent()函數(shù):

function addEvent(node, type, callback) { if (node.addEventListener) { node.addEventListener(type, function(e) { callback(e, e.target); }, false); } else if (node.attachEvent) { node.attachEvent(’on’ + type, function(e) { callback(e, e.srcElement); }); }}

接下來,我們需要一個函數(shù)來確定一個給定的字段是否應(yīng)該被驗證,它只是測試該字段既沒被禁用(disabled )也不是只讀(readonly),并且它具有一個 pattern 或一個 required 屬性:

function shouldBeValidated(field) { return ( !(field.getAttribute('readonly') || field.readonly) && !(field.getAttribute('disabled') || field.disabled) && (field.getAttribute('pattern') || field.getAttribute('required')) );}

前兩個條件可能看起來很冗長,但它們是必需的,因為元素的 disabled 和 readonly 屬性不一定反映其屬性狀態(tài)。 例如,在Opera中,硬編碼屬性readonly =“readonly”的字段對于其readonly屬性仍將返回undefined(點屬性僅匹配通過腳本設(shè)置的狀態(tài))。

一旦我們得到了這些實用程序,我們就可以定義主要的驗證函數(shù),它測試這個字段,然后執(zhí)行實際的驗證,如果適用的話:

function instantValidation(field) { if (shouldBeValidated(field)) { var invalid = (field.getAttribute('required') && !field.value) || (field.getAttribute('pattern') &&field.value &&!new RegExp(field.getAttribute('pattern')).test(field.value)); if (!invalid && field.getAttribute('aria-invalid')) { field.removeAttribute('aria-invalid'); } else if (invalid && !field.getAttribute('aria-invalid')) { field.setAttribute('aria-invalid', 'true'); } }}

所以當(dāng)一個字段是必需的卻沒有賦值,或者它的值不匹配它的模式,則該字段是無效的。

由于模式( pattern )已經(jīng)定義了正則表達式的字符串形式,所以我們要做的就是將該字符串傳遞給RegExp構(gòu)造函數(shù),它將創(chuàng)建一個可以對該值進行測試的正則表達式對象。 但是,我們必須 預(yù)先測試 該值以確保它不為空,以便正則表達式本身不必考慮空字符串。

一旦我們確定一個字段是否無效,我們就可以控制它的aria-invalid屬性來指示該狀態(tài) - 將它添加到一個不具有該字段的無效字段中,或者從一個有效的字段中刪除它。 簡單吧! 最后,為了把這一切付諸實施,我們需要將驗證函數(shù)綁定到一個onchange事件。 就是 這么簡單:

addEvent(document, 'change', function(e, target) { instantValidation(target);});

然而,為了使它工作,onchange事件 必須冒泡 (使用通常稱為 事件委托 的技術(shù)),但在Internet Explorer 8和更早版本中,onchange事件 不會冒泡 。 我們可以選擇忽略這些瀏覽器,但我認(rèn)為這將是一種恥辱,尤其是當(dāng)問題的解決方法是如此簡單。 它只是意味著代碼更加復(fù)雜 - 我們必須獲取input和textarea元素的集合,遍歷它們,并將onchange事件單獨綁定到每個字段上:

var fields = [ document.getElementsByTagName('input'), document.getElementsByTagName('textarea')];for (var a = fields.length, i = 0; i < a; i++) { for (var b = fields[i].length, j = 0; j < b; j++) { addEvent(fields[i][j], 'change', function(e, target) { instantValidation(target); }); }} 結(jié)論及更多

至此我們已經(jīng)完成了 - 一個簡單和非侵入性的即時表單驗證增強,提供可訪問和可視化的提示,以幫助用戶完成表單。 您可以查看以下演示:

請參閱 CodePen 上SitePoint( @SitePoint )的Pen 即時表單驗證 。

來自:https://coyee.com/article/12365-instant-form-validation-using-javascript

標(biāo)簽: JavaScript
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
好吊日精品视频| 欧美一区=区三区| 国产麻豆精品| 亚洲精品字幕| 蜜桃视频免费观看一区| 亚洲精品国产偷自在线观看| 在线手机中文字幕| 久久久91麻豆精品国产一区| 欧美亚洲tv| 欧美日韩一区自拍| 欧美在线首页| 欧美在线日韩| 国产精品久久久一区二区| 蜜桃久久av一区| 综合国产视频| 日本一区二区中文字幕| 日本成人中文字幕| 国产精品网址| 国产videos久久| caoporn视频在线| 久久激情中文| 久久高清精品| 欧美精品九九| 蜜桃av一区| 日本不卡高清| 国产精品片aa在线观看| 精品国产中文字幕第一页| 国产suv精品一区| 成人福利视频| 亚洲夜间福利| 日韩精品一区第一页| 免费久久99精品国产| 亚洲香蕉久久| 久久99影视| 日韩欧美一区免费| 不卡中文字幕| 亚洲精品中文字幕99999| 亚洲精品在线国产| 欧美aa在线视频| 香蕉视频亚洲一级| 中文精品在线| 91成人小视频| 成人影视亚洲图片在线| 亚洲高清激情| 亚洲资源在线| 麻豆精品久久| 久久一级电影| 亚洲丝袜美腿一区| 国产精品白丝久久av网站| 久久久一本精品| 蜜桃视频在线观看一区| 麻豆精品国产91久久久久久| 97精品一区| 亚洲激情av| 久久国产精品免费一区二区三区| 成人国产精品| 久久福利精品| 精品一区二区三区中文字幕视频| 日韩欧美二区| 亚州av一区| 四虎成人av| 亚洲欧美日韩在线观看a三区| 欧美日韩精品一区二区三区视频 | 视频一区中文字幕国产| 国产区精品区| 亚洲手机视频| 国产精品免费不| 国产精品99免费看| 精品国产一区二| 久久免费大视频| 欧美亚洲专区| 免费日韩一区二区| 午夜av成人| 国产福利资源一区| 亚洲精品欧美| 一区视频在线| 四虎4545www国产精品 | 日韩精品一区二区三区免费观看| 91成人在线精品视频| 中文精品视频| 中文一区一区三区高中清不卡免费| 欧美亚洲专区| 日韩一区二区三区在线看| 亚洲少妇在线| 欧美日韩视频一区二区三区| 麻豆成全视频免费观看在线看| 国产伦乱精品| 国产欧美88| 日本欧美在线| 免费人成在线不卡| 尤物精品在线| 九一成人免费视频| 韩国精品主播一区二区在线观看| 精品亚洲成人| 美女毛片一区二区三区四区最新中文字幕亚洲| 9色精品在线| 在线观看免费一区二区| 欧美日韩在线网站| 99国产精品免费视频观看| 亚洲风情在线资源| 午夜av不卡| 国产v综合v| 91看片一区| 神马日本精品| 久久国产免费| 尤物tv在线精品| 欧美福利一区| 激情视频一区二区三区| 欧美天堂亚洲电影院在线观看| 国产综合精品一区| 亚洲综合在线电影| 欧美日韩亚洲在线观看| 久久免费大视频| 亚洲精品一区二区在线看| 99久久久久国产精品| 99久久九九| 国产麻豆综合| 日韩精品欧美大片| 国产精品免费99久久久| 久久精品国产99国产精品| 超碰成人av| 激情久久久久久久| 亚洲综合欧美| 日韩精品三区四区| 国产欧美日韩视频在线| 国产精品分类| 精品国产乱码| 丝袜av一区| 蜜臀久久久99精品久久久久久| 亚洲不卡视频| 国产精品观看| 国产成人精品一区二区三区在线| 中文字幕在线免费观看视频| 三上悠亚国产精品一区二区三区| 国内精品福利| 中文无码日韩欧| 国产欧美三级| 国产成人精品亚洲日本在线观看| 精品一区三区| 亚洲尤物av| 欧美日韩亚洲一区在线观看| 国产极品一区| 久久久久久美女精品| 中文欧美日韩| 国产欧美一区二区三区米奇| 岛国精品一区| 夜久久久久久| 欧美一区免费| 欧美aa在线观看| 首页国产欧美久久| 欧美日韩a区| 一级欧美视频| 久久精品国产亚洲夜色av网站| 欧美日韩亚洲在线观看| 日韩精品一级中文字幕精品视频免费观看| 精品免费av在线| 激情五月综合网| 亚洲有吗中文字幕| 国产乱子精品一区二区在线观看| 久久97视频| 欧美三级精品| 模特精品在线| 国产日韩一区二区三区在线播放| 久久99国产精品视频| 99久久夜色精品国产亚洲1000部| 在线精品视频在线观看高清| 亚洲久草在线| 老司机精品视频在线播放| 日韩欧美1区| 日韩中文字幕亚洲一区二区va在线| 免费在线看一区| 麻豆高清免费国产一区| 人人香蕉久久| 蜜桃久久久久久久| 久久99蜜桃| 亚洲国产日韩欧美在线| 综合在线一区| 精品亚洲自拍| 影音国产精品| 国产精品一区三区在线观看| 婷婷综合六月| 亚洲2区在线| 涩涩av在线| 亚洲色图国产| 成人午夜网址| 国产精品毛片| 欧美国产精品| 国产一区日韩一区| 日韩av中文在线观看| 日韩免费一区| 日韩精品第二页| 91亚洲国产成人久久精品| 久久夜色精品| 精品国产精品国产偷麻豆| 免费久久99精品国产自在现线| 欧美日韩伊人| 亚洲综合日韩| 成人精品视频| 日韩国产欧美在线视频| 精品视频自拍|