国产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來增強(qiáng)原生驗證。這是因為存在一些限制,例如並非所有瀏覽器都支持所有HTML5輸入類型和CSS選擇器,並且難以設(shè)置錯誤消息氣泡的樣式。
  • 約束驗證API提供了一些方法和屬性,例如.willValidate、.checkValidity().validity.setCustomValidity()。這些分別用於檢查是否將驗證字段、驗證字段、檢查字段的有效性以及設(shè)置自定義有效性消息。但是,並非所有屬性都受所有瀏覽器支持。
  • 可以使用JavaScript和約束驗證API創(chuàng)建一個簡單的、通用的跨瀏覽器表單驗證系統(tǒng)。此系統(tǒng)包括禁用原生驗證、循環(huán)遍歷所有字段以檢查原生驗證是否可用以及輸入類型是否受支持、檢查字段的有效性以及設(shè)置自定義有效性消息。此系統(tǒng)可以適應(yīng)以支持較舊的瀏覽器和不同的輸入類型。

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

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

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

攔截表單提交

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

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

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

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

字段.willValidate屬性

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

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

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

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

// 設(shè)置處理程序以在提交時驗證表單
// 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)的代碼將在可以使用原生驗證時進(jìn)行評估。但是……

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

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

// 原生瀏覽器驗證可用嗎?
        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()方法,它返回當(dāng)前狀態(tài)而無需重新檢查,儘管這不太有用,並且並非所有瀏覽器都支持。這兩種方法也會:

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

字段.validity對象

.validity對象具有以下屬性:

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

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

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

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

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(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

強(qiáng)大的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是不同的編程語言,各自適用於不同的應(yīng)用場景。 Java用於大型企業(yè)和移動應(yīng)用開發(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.獲取和設(shè)置時間信息可用get和set方法,注意月份從0開始;3.手動格式化日期需拼接字符串,也可使用第三方庫;4.處理時區(qū)問題建議使用支持時區(qū)的庫,如Luxon。掌握這些要點能有效避免常見錯誤。

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

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

為什麼要將標(biāo)籤放在的底部? 為什麼要將標(biāo)籤放在的底部? Jul 02, 2025 am 01:22 AM

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

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

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

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

See all articles