検索
ホームページウェブフロントエンドjsチュートリアルHTML5フォーム:JavaScriptおよび制約検証API

HTML5 Forms: JavaScript and the Constraint Validation API

コアポイント

  • HTML5を使用すると、クライアントフォームの検証がJavaScriptエンコードから解放されますが、より複雑なフォームの場合、JavaScriptと制約検証APIを使用してネイティブ検証を強化できます。これは、すべてのブラウザがすべてのHTML5入力タイプとCSSセレクターをサポートしているわけではないなど、いくつかの制限が原因であり、エラーメッセージバブルをスタイリングすることは困難です。
  • 制約検証APIは、.willValidate.checkValidity().validity.setCustomValidity()などのいくつかのメソッドとプロパティを提供します。これらは、フィールドが検証されるかどうか、フィールドが検証され、フィールドの有効性、カスタム有効性メッセージが設定されるかどうかを確認するために使用されます。ただし、すべての属性がすべてのブラウザによってサポートされているわけではありません。
  • JavaScriptおよび制約検証APIを使用して、シンプルで普遍的なクロスブラウザーフォーム検証システムを作成できます。このシステムには、ネイティブ検証の無効化、すべてのフィールドをループするために、ネイティブ検証が利用可能かどうか、入力タイプがサポートされているかどうかを確認し、フィールドの有効性を確認し、カスタム有効性メッセージの設定が含まれます。このシステムは、古いブラウザとさまざまな入力タイプをサポートするように適合させることができます。
この記事は、HTML5 Webフォームに関する3部構成のシリーズの最後のものであり、JavaScriptの統合と制約検証APIについて説明します。タグ付きの記事とCSSの記事を読んでいない場合は、まず読んで、これらの概念に精通していることを確認してください。 HTML5を使用すると、JavaScriptコードなしでクライアントフォーム検証を実装できます。ただし、より複雑なフォームを実装する場合、ネイティブ検証を強化する必要があります。

すべてのブラウザは、すべてのHTML5入力タイプとCSSセレクターをサポートしていません
    メッセージバブルは共通テキストを使用します(「このフィールドに入力してください」) ユーザーがフォームと対話する前にページがロードされると、
  • および
  • スタイルが適用されます。
  • :invalid一部のJavaScriptコードと制約検証APIは、ユーザーエクスペリエンスを向上させることができます。さまざまなブラウザや入力タイプをサポートしたい場合、これは少し乱雑になる可能性があることに注意してください。 :required
フォームの提出をインターセプト

プロパティをに設定することにより、ネイティブ検証をオフにする必要があります。

もちろん、これはコードのフィールドエラーを確認する必要があることを意味しますが、すぐにネイティブブラウザの検証を使用することが可能であることがわかります。 noValidate true

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

// 设置处理程序以在提交时验证表单
// onsubmit 用于更轻松的跨浏览器兼容性
form.onsubmit = validateForm;
プロパティ

各入力フィールドには.willValidate属性があります。これは返されます:

  • true:ブラウザがネイティブ検証フィールドを配置する場合
  • :ブラウザがフィールドを確認しない場合 false
  • :ブラウザがIE8などのネイティブHTML5検証をサポートしていない場合。
  • undefined
  • 上記のネイティブ検証を無効にしたため、各フィールドは
に戻ります。すべてのフィールドをループし、ネイティブ検証が利用可能かどうかを確認します。

ループイテレーションは、単一のfalseコレクションのすべてのフィールドを表し、ボタンやフィールドセットなどの他のタイプではなく入力であることをチェックします。次の行は非常に重要です... validateForm

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

// 设置处理程序以在提交时验证表单
// onsubmit 用于更轻松的跨浏览器兼容性
form.onsubmit = validateForm;

およびelementsはどちらも誤った値なので、

を確認することはできません!最初のコードブロック内のコードは、ネイティブ検証で使用できる場合に評価されることがわかりました。しかし...
function validateForm(event) {

    // 获取跨浏览器事件对象和表单节点
    event = (event ? event : window.event);
    var
        form = (event.target ? event.target : event.srcElement),
        f, field, formvalid = true;

    // 循环所有字段
    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 {

            // 原生验证不可用

        }
    }
}

falseブラウザは入力タイプをサポートしていますか? undefinedfield.willValidate

最初の部分を読むと、サポートされていない入力タイプがテキストに戻ることを覚えています。たとえば、

Firefox 29またはIE11でのネイティブサポートはありません。これらのブラウザは(効果的に)レンダリングされます:

ただし、両方のブラウザはテキストタイプの検証をサポートしているため、

// 原生浏览器验证可用吗?
        if (typeof field.willValidate !== "undefined") {

            // 原生验证可用

        }
        else {

            // 原生验证不可用

        }
に戻りません!したがって、オブジェクトの属性がオブジェクトの属性と一致するかどうかを確認する必要があります - それらが一致しない場合、例えば、レガシーフォールバック検証を実装する必要があります。

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

method field.willValidateundefined typeネイティブ検証が利用可能な場合は、.typeメソッドを実行してフィールドを確認できます。問題がない場合、メソッドは

を返します。これはあまり有用ではなく、すべてのブラウザーでサポートされていないが、再確認せずに現在の状態を返す
<input type="text" name="dob" />
メソッドもあります。これらの2つの方法も次のとおりです

エラーをより詳細にチェックできるように、フィールドの.checkValidity()オブジェクトを設定します 検証が失敗すると、

イベントがフィールドで発射されます。これは、エラー、色の変更などを表示するために使用できます。対応する

イベントはないことに注意してください。必要に応じてエラースタイルとメッセージをリセットすることを忘れないでください。 .checkValidity() true false.reportValidity()field

object
  1. .validityオブジェクトには、次のプロパティがあります。
  2. .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すべてのプロパティがすべてのブラウザでサポートされているわけではないため、あまりにも多くの仮定をしないように注意してください。ほとんどの場合、エラーメッセージを表示または非表示にするには、

    または

    の結果である必要があります。 .valid .checkValidity()

    (後続のコンテンツは元のテキストと同じで、長さが長すぎるため、ここでは省略されています。必要に応じて、出力コンテンツの長さと詳細を自分で調整してください。)

以上がHTML5フォーム:JavaScriptおよび制約検証APIの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
JavaScriptの文字列文字を交換しますJavaScriptの文字列文字を交換しますMar 11, 2025 am 12:07 AM

JavaScript文字列置換法とFAQの詳細な説明 この記事では、javaScriptの文字列文字を置き換える2つの方法について説明します:内部JavaScriptコードとWebページの内部HTML。 JavaScriptコード内の文字列を交換します 最も直接的な方法は、置換()メソッドを使用することです。 str = str.replace( "find"、 "置換"); この方法は、最初の一致のみを置き換えます。すべての一致を置き換えるには、正規表現を使用して、グローバルフラグGを追加します。 str = str.replace(/fi

独自のJavaScriptライブラリを作成および公開するにはどうすればよいですか?独自のJavaScriptライブラリを作成および公開するにはどうすればよいですか?Mar 18, 2025 pm 03:12 PM

記事では、JavaScriptライブラリの作成、公開、および維持について説明し、計画、開発、テスト、ドキュメント、およびプロモーション戦略に焦点を当てています。

ブラウザでのパフォーマンスのためにJavaScriptコードを最適化するにはどうすればよいですか?ブラウザでのパフォーマンスのためにJavaScriptコードを最適化するにはどうすればよいですか?Mar 18, 2025 pm 03:14 PM

この記事では、ブラウザでJavaScriptのパフォーマンスを最適化するための戦略について説明し、実行時間の短縮、ページの負荷速度への影響を最小限に抑えることに焦点を当てています。

jQueryマトリックス効果jQueryマトリックス効果Mar 10, 2025 am 12:52 AM

マトリックスの映画効果をあなたのページにもたらしましょう!これは、有名な映画「The Matrix」に基づいたクールなJQueryプラグインです。プラグインは、映画の古典的な緑色のキャラクター効果をシミュレートし、画像を選択するだけで、プラグインはそれを数値文字で満たされたマトリックススタイルの画像に変換します。来て、それを試してみてください、それはとても面白いです! それがどのように機能するか プラグインは画像をキャンバスにロードし、ピクセルと色の値を読み取ります。 data = ctx.getimagedata(x、y、settings.greasize、settings.greasize).data プラグインは、写真の長方形の領域を巧みに読み取り、jQueryを使用して各領域の平均色を計算します。次に、使用します

ブラウザ開発者ツールを使用してJavaScriptコードを効果的にデバッグするにはどうすればよいですか?ブラウザ開発者ツールを使用してJavaScriptコードを効果的にデバッグするにはどうすればよいですか?Mar 18, 2025 pm 03:16 PM

この記事では、ブラウザ開発者ツールを使用した効果的なJavaScriptデバッグについて説明し、ブレークポイントの設定、コンソールの使用、パフォーマンスの分析に焦点を当てています。

シンプルなjQueryスライダーを構築する方法シンプルなjQueryスライダーを構築する方法Mar 11, 2025 am 12:19 AM

この記事では、jQueryライブラリを使用してシンプルな画像カルーセルを作成するように導きます。 jQuery上に構築されたBXSLiderライブラリを使用し、カルーセルをセットアップするために多くの構成オプションを提供します。 今日、絵のカルーセルはウェブサイトで必須の機能になっています - 1つの写真は千の言葉よりも優れています! 画像カルーセルを使用することを決定した後、次の質問はそれを作成する方法です。まず、高品質の高解像度の写真を収集する必要があります。 次に、HTMLとJavaScriptコードを使用して画像カルーセルを作成する必要があります。ウェブ上には、さまざまな方法でカルーセルを作成するのに役立つ多くのライブラリがあります。オープンソースBXSLiderライブラリを使用します。 BXSLiderライブラリはレスポンシブデザインをサポートしているため、このライブラリで構築されたカルーセルは任意のものに適合させることができます

JavaScriptによる構造マークアップの強化JavaScriptによる構造マークアップの強化Mar 10, 2025 am 12:18 AM

キーポイントJavaScriptを使用した構造的なタグ付けの強化は、ファイルサイズを削減しながら、Webページコンテンツのアクセシビリティと保守性を大幅に向上させることができます。 JavaScriptを効果的に使用して、Cite属性を使用して参照リンクを自動的にブロック参照に挿入するなど、HTML要素に機能を動的に追加できます。 JavaScriptを構造化されたタグと統合することで、ページの更新を必要としないタブパネルなどの動的なユーザーインターフェイスを作成できます。 JavaScriptの強化がWebページの基本的な機能を妨げないようにすることが重要です。 高度なJavaScriptテクノロジーを使用できます(

Angularを使用してCSVファイルをアップロードおよびダウンロードする方法Angularを使用してCSVファイルをアップロードおよびダウンロードする方法Mar 10, 2025 am 01:01 AM

データセットは、APIモデルとさまざまなビジネスプロセスの構築に非常に不可欠です。これが、CSVのインポートとエクスポートが頻繁に必要な機能である理由です。このチュートリアルでは、Angular内でCSVファイルをダウンロードおよびインポートする方法を学びます

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、