国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 web前端 js教程 HTML5表格:JavaScript和約束驗證API

HTML5表格:JavaScript和約束驗證API

Feb 21, 2025 am 10:03 AM

HTML5 Forms: JavaScript and the Constraint Validation API

核心要點

  • HTML5允許客戶端表單驗證無需JavaScript編碼,但對于更復雜的表單,可以使用JavaScript和約束驗證API來增強原生驗證。這是因為存在一些限制,例如并非所有瀏覽器都支持所有HTML5輸入類型和CSS選擇器,并且難以設置錯誤消息氣泡的樣式。
  • 約束驗證API提供了一些方法和屬性,例如.willValidate.checkValidity()、.validity.setCustomValidity()。這些分別用于檢查是否將驗證字段、驗證字段、檢查字段的有效性以及設置自定義有效性消息。但是,并非所有屬性都受所有瀏覽器支持。
  • 可以使用JavaScript和約束驗證API創(chuàng)建一個簡單的、通用的跨瀏覽器表單驗證系統(tǒng)。此系統(tǒng)包括禁用原生驗證、循環(huán)遍歷所有字段以檢查原生驗證是否可用以及輸入類型是否受支持、檢查字段的有效性以及設置自定義有效性消息。此系統(tǒng)可以適應以支持較舊的瀏覽器和不同的輸入類型。

本文是關于HTML5網(wǎng)絡表單的三部分系列文章中的最后一篇,我們將討論JavaScript集成和約束驗證API。如果您尚未閱讀標記和CSS文章,請先閱讀以確保您熟悉這些概念。HTML5允許我們在無需任何JavaScript代碼的情況下實現(xiàn)客戶端表單驗證。但是,在實現(xiàn)更復雜的表單時,我們需要增強原生驗證,因為:

  • 并非所有瀏覽器都支持所有HTML5輸入類型和CSS選擇器;
  • 錯誤消息氣泡使用通用文本(“請?zhí)顚懘俗侄巍保┎⑶译y以設置樣式;
  • :invalid:required樣式在用戶與表單交互之前就在頁面加載時應用。

一些JavaScript代碼和約束驗證API可以改善用戶體驗。請注意,如果您想支持各種瀏覽器和輸入類型,這可能會變得有點混亂,我們將努力做到這一點。

攔截表單提交

在HTML5之前,客戶端驗證涉及將提交處理程序附加到表單,該處理程序將驗證字段、顯示錯誤并阻止提交事件。在HTML5中,瀏覽器將首先執(zhí)行其自身的驗證——只有在表單有效時才會觸發(fā)提交事件。因此,如果您想執(zhí)行一些復雜的操作,例如顯示您自己的錯誤、比較或自動填充字段,則必須通過將表單的noValidate屬性設置為true來關閉原生驗證:

var form = document.getElementById("myform");
form.noValidate = true;

// 設置處理程序以在提交時驗證表單
// onsubmit 用于更輕松的跨瀏覽器兼容性
form.onsubmit = validateForm;

當然,這意味著您必須在代碼中檢查字段錯誤,但我們很快就會看到,仍然可以使用原生的瀏覽器驗證。

字段.willValidate屬性

每個輸入字段都有一個.willValidate屬性。這將返回:

  • true:當瀏覽器將原生驗證字段時;
  • false:當瀏覽器不會驗證字段時;
  • undefined:當瀏覽器不支持原生HTML5驗證時,例如IE8。

由于我們上面禁用了原生驗證,因此每個字段都將返回false。讓我們創(chuàng)建我們的validateForm處理程序,它將循環(huán)遍歷所有字段并檢查原生驗證是否可用:

var form = document.getElementById("myform");
form.noValidate = true;

// 設置處理程序以在提交時驗證表單
// onsubmit 用于更輕松的跨瀏覽器兼容性
form.onsubmit = validateForm;

循環(huán)迭代表單elements集合中的所有字段,并檢查它們是輸入而不是其他類型,例如按鈕和字段集。下一行很重要……

function validateForm(event) {

    // 獲取跨瀏覽器事件對象和表單節(jié)點
    event = (event ? event : window.event);
    var
        form = (event.target ? event.target : event.srcElement),
        f, field, formvalid = true;

    // 循環(huán)所有字段
    for (f = 0; f < form.elements.length; f++) {
        // 獲取字段
        field = form.elements[f];

        // 忽略按鈕、字段集等
        if (field.nodeName !== "INPUT" && field.nodeName !== "TEXTAREA" && field.nodeName !== "SELECT") continue;

        // 原生瀏覽器驗證可用嗎?
        if (typeof field.willValidate !== "undefined") {

            // 原生驗證可用

        }
        else {

            // 原生驗證不可用

        }
    }
}

falseundefined都是虛假值,因此您不能只檢查field.willValidate!我們現(xiàn)在知道第一個代碼塊內(nèi)的代碼將在可以使用原生驗證時進行評估。但是……

瀏覽器是否支持輸入類型?

如果您閱讀第一部分,您會記得不支持的輸入類型會回退到文本。例如:

// 原生瀏覽器驗證可用嗎?
        if (typeof field.willValidate !== "undefined") {

            // 原生驗證可用

        }
        else {

            // 原生驗證不可用

        }

在Firefox 29或IE11中不受原生支持。這些瀏覽器將(有效地)呈現(xiàn):

<input type="date" name="dob" />

但是,這兩個瀏覽器都支持文本類型的驗證,因此field.willValidate不會返回undefined!因此,我們必須檢查我們的type屬性是否與對象的.type屬性匹配——如果它們不匹配,我們需要實現(xiàn)舊版回退驗證,例如:

<input type="text" name="dob" />

字段.checkValidity()方法

如果原生驗證可用,則可以執(zhí)行.checkValidity()方法來驗證字段。如果沒有任何問題,則該方法返回true,否則返回false。還有一個類似的.reportValidity()方法,它返回當前狀態(tài)而無需重新檢查,盡管這不太有用,并且并非所有瀏覽器都支持。這兩種方法也會:

  1. 設置字段的.validity對象,以便可以更詳細地檢查錯誤;
  2. 當驗證失敗時,在字段上觸發(fā)invalid事件。這可以用來顯示錯誤、更改顏色等。請注意,沒有相應的valid事件,因此請記住如有必要重置錯誤樣式和消息。

字段.validity對象

.validity對象具有以下屬性:

.valid – 如果字段沒有錯誤,則返回true,否則返回false.valueMissing – 如果字段是必需的但未輸入值,則返回true。 .typeMismatch – 如果值不是正確的語法(例如,格式錯誤的電子郵件地址),則返回true.patternMismatch – 如果值與pattern屬性的正則表達式不匹配,則返回true。 .tooLong – 如果值長于允許的maxlength,則返回true。 .tooShort – 如果值短于允許的minlength,則返回true。 .rangeUnderflow – 如果值低于min,則返回true。 .rangeOverflow – 如果值高于max,則返回true。 .stepMismatch – 如果值與step不匹配,則返回true.badInput – 如果條目無法轉換為值,則返回true。 .customError – 如果字段設置了自定義錯誤,則返回true。

并非所有屬性都受所有瀏覽器支持,因此請注意不要做太多假設。在大多數(shù)情況下,.valid.checkValidity()的結果應該足以顯示或隱藏錯誤消息。

(后續(xù)內(nèi)容與原文相同,篇幅過長,此處省略。 請根據(jù)需要自行調整輸出內(nèi)容的長度和細節(jié)。)

以上是HTML5表格:JavaScript和約束驗證API的詳細內(nèi)容。更多信息請關注PHP中文網(wǎng)其他相關文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅動的應用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

Java vs. JavaScript:清除混亂 Java vs. JavaScript:清除混亂 Jun 20, 2025 am 12:27 AM

Java和JavaScript是不同的編程語言,各自適用于不同的應用場景。Java用于大型企業(yè)和移動應用開發(fā),而JavaScript主要用于網(wǎng)頁開發(fā)。

JavaScript評論:簡短說明 JavaScript評論:簡短說明 Jun 19, 2025 am 12:40 AM

JavascriptconcommentsenceenceEncorenceEnterential gransimenting,reading and guidingCodeeXecution.1)單inecommentsareusedforquickexplanations.2)多l(xiāng)inecommentsexplaincomplexlogicorprovideDocumentation.3)

如何在JS中與日期和時間合作? 如何在JS中與日期和時間合作? Jul 01, 2025 am 01:27 AM

JavaScript中的日期和時間處理需注意以下幾點:1.創(chuàng)建Date對象有多種方式,推薦使用ISO格式字符串以保證兼容性;2.獲取和設置時間信息可用get和set方法,注意月份從0開始;3.手動格式化日期需拼接字符串,也可使用第三方庫;4.處理時區(qū)問題建議使用支持時區(qū)的庫,如Luxon。掌握這些要點能有效避免常見錯誤。

為什么要將標簽放在的底部? 為什么要將標簽放在的底部? Jul 02, 2025 am 01:22 AM

PlacingtagsatthebottomofablogpostorwebpageservespracticalpurposesforSEO,userexperience,anddesign.1.IthelpswithSEObyallowingsearchenginestoaccesskeyword-relevanttagswithoutclutteringthemaincontent.2.Itimprovesuserexperiencebykeepingthefocusonthearticl

JavaScript與Java:開發(fā)人員的全面比較 JavaScript與Java:開發(fā)人員的全面比較 Jun 20, 2025 am 12:21 AM

JavaScriptIspreferredforredforwebdevelverment,而Javaisbetterforlarge-ScalebackendsystystemsandSandAndRoidApps.1)JavascriptexcelcelsincreatingInteractiveWebexperienceswebexperienceswithitswithitsdynamicnnamicnnamicnnamicnnamicnemicnemicnemicnemicnemicnemicnemicnemicnddommanipulation.2)

JavaScript:探索用于高效編碼的數(shù)據(jù)類型 JavaScript:探索用于高效編碼的數(shù)據(jù)類型 Jun 20, 2025 am 12:46 AM

javascripthassevenfundaMentalDatatypes:數(shù)字,弦,布爾值,未定義,null,object和symbol.1)numberSeadUble-eaduble-ecisionFormat,forwidevaluerangesbutbecautious.2)

什么是在DOM中冒泡和捕獲的事件? 什么是在DOM中冒泡和捕獲的事件? Jul 02, 2025 am 01:19 AM

事件捕獲和冒泡是DOM中事件傳播的兩個階段,捕獲是從頂層向下到目標元素,冒泡是從目標元素向上傳播到頂層。1.事件捕獲通過addEventListener的useCapture參數(shù)設為true實現(xiàn);2.事件冒泡是默認行為,useCapture設為false或省略;3.可使用event.stopPropagation()阻止事件傳播;4.冒泡支持事件委托,提高動態(tài)內(nèi)容處理效率;5.捕獲可用于提前攔截事件,如日志記錄或錯誤處理。了解這兩個階段有助于精確控制JavaScript響應用戶操作的時機和方式。

Java和JavaScript有什么區(qū)別? Java和JavaScript有什么區(qū)別? Jun 17, 2025 am 09:17 AM

Java和JavaScript是不同的編程語言。1.Java是靜態(tài)類型、編譯型語言,適用于企業(yè)應用和大型系統(tǒng)。2.JavaScript是動態(tài)類型、解釋型語言,主要用于網(wǎng)頁交互和前端開發(fā)。

See all articles