ホームページ >ウェブフロントエンド >CSSチュートリアル >HTMLフォームと制約検証の完全なガイド
キーテイクアウト
クライアント側の検証は、アプリが時間を無駄にしてデータをサーバーに送信する前に、一般的なデータエントリエラーを防ぐことができる重要なものです。サーバー側の検証に代わるものではありません!
常にデータサーバー側を消毒します。すべてのリクエストがブラウザから来るわけではありません。それがそうであっても、ブラウザがデータを検証した保証はありません。ブラウザの開発者ツールを開く方法を知っている人なら誰でも、愛情を込めて作成されたHTMLとJavaScriptをバイパスすることもできます。
htmlオファー:
ただし、を使用します
<span><span><span><input</span> type<span>="text"</span> name<span>="username"</span> /></span> </span>タイプ属性はコントロールタイプを設定し、オプションの大きな選択肢があります:
タイプ
その他の便利な
属性
説明フィールドには、関連するが必要です。これは要素を包み込むことができます:
<span><span><span><input</span> type<span>="text"</span> name<span>="username"</span> /></span> </span>
または属性を使用して、フィールドのIDをラベルにリンクします:
<span><span><span><label</span>></span>your name <span><span><input</span> type<span>="text"</span> name<span>="name"</span> /></span><span><span><label</span>></span> </span>
ラベルはアクセシビリティにとって重要です。プレースホルダーを使用して画面スペースを節約するフォームに遭遇した可能性があります:
<span><span><span><label</span> for<span>="nameid"</span>></span>your name<span><span></label</span>></span> </span><span><span><span><input</span> type<span>="text"</span> id<span>="nameid"</span> name<span>="name"</span> /></span> </span>
ユーザーが何かを入力すると、プレースホルダーテキストは消えます - 単一のスペースでさえも。ユーザーがフィールドが望んでいたものを強制的に覚えているよりも、ラベルを表示する方が良いです!
フィールドタイプと制約属性は、ブラウザの入力動作を変更します。たとえば、数値入力には、モバイルデバイスの数値キーボードが表示されます。フィールドには、スピナーとキーボードのアップ/ダウンカーソルプレスが表示される場合があります。
ほとんどのフィールドタイプは明らかですが、例外があります。たとえば、クレジットカードは数値ですが、インクリメント/デクリメントスピナーは役に立たず、16桁の数字を入力すると上下に押し下げるのは簡単すぎます。標準のテキストタイプを使用する方が良いが、inputMode属性を適切なキーボードを表示する数値に設定することをお勧めします。 AutoComplete = "CC-Number"の設定も、事前に構成または以前に入力されたカード番号を提案します。正しいフィールドタイプとAutoCorRectを使用すると、JavaScriptで達成するのが難しい利点が提供されます。たとえば、一部のモバイルブラウザーは
ですカメラを使用してカードをスキャンしてクレジットカードの詳細をインポート
空の値を送信しようとすると、フォームの提出が防止され、次のメッセージがChromeに表示されます。
<span><span><span><input</span> type<span>="text"</span> name<span>="name"</span> value<span>=""</span> placeholder<span>="your name"</span> /></span> </span>
スピナーは、1〜100の範囲外の値を許可しません。数字ではない文字列を入力すると、同様の検証メッセージが表示されます。
JavaScriptの単一行なし
:
にNovalidate属性を追加します
フォームバリデート属性を送信ボタンまたは画像に追加
カスタム入力コントロールを書くことは困難です。マウス、キーボード、タッチ、音声、アクセシビリティ、画面寸法、およびJavaScriptが失敗したときに何が起こるかを考慮する必要があります。また、別のユーザーエクスペリエンスを作成しています。おそらく、あなたのコントロールは、デスクトップ、iOS、およびAndroidの標準日付ピッカーよりも優れていますが、なじみのないUIは一部のユーザーを混乱させます。
開発者がJavaScriptベースの入力を作成することを選択する主な理由は3つあります。1。標準的なコントロールをスタイリングするのは困難です
CSSスタイリングは限られており、多くの場合、ラベルの::前の:: :: :: fohindの後の入力をオーバーレイするなど、ハッキングが必要です。状況は改善されていますが、機能よりもフォームに優先順位を付けるデザインに疑問を投げかけています。本質的に、インターネットエクスプローラーをコーディングしています。 IEユーザーはデートピッカーを取得しませんが、Yyyy-MM-DD形式で日付を入力できます。クライアントが主張する場合は、IEのみでポリフィルをロードします。最新のブラウザに負担をかける必要はありません
3。以前に実装されたことのない新しい入力タイプが必要ですselector
説明 :集中 フォーカスのフィールド :フォーカスウィチン 要素にはフォーカスのあるフィールドが含まれています(はい、それは親セレクターです!) :フォーカス可視 キーボードナビゲーションのために要素がフォーカスを持っているので、フォーカスリングまたはより明白なスタイリングが必要です :必須 必要な属性を持つフィールド :オプション 必要な属性のないフィールド :有効 検証に合格したフィールド :無効 検証に合格していないフィールド :user-valid ユーザーが対話した後に検証に合格したフィールド(Firefoxのみ) :user-invalid ユーザーが対話した後に検証に合格していないフィールド(Firefoxのみ) :範囲内 値は、数または範囲の入力の範囲内です :範囲外 値は、数または範囲の入力の範囲外です :無効 無効な属性を持つフィールド :有効にします 無効な属性のないフィールド :読み取り専用 読み取り専用属性を持つフィールド :read-write: 読み取り専用属性のないフィールド :チェック チェックされたチェックボックスまたはラジオボタン :不定 すべてのラジオボタンがチェックされていないときなど、不確定なチェックボックスまたはラジオ状態 :デフォルト デフォルトの送信ボタンまたは画像
::プレースホルダー擬似要素で入力のプレースホルダーテキストをスタイリングできます:<span><span><span><input</span> type<span>="text"</span> name<span>="username"</span> /></span> </span>
上記のセレクターは同じ特異性を持っているため、順序が重要になる可能性があります。この例を考えてみましょう:
<span><span><span><label</span>></span>your name <span><span><input</span> type<span>="text"</span> name<span>="name"</span> /></span><span><span><label</span>></span> </span>
無効な入力には赤いテキストがありますが、無効な属性を持つ入力にのみ適用されます。 ブラウザは、ページの読み込みに検証スタイルを適用します。たとえば、次のコードでは、すべての無効なフィールドに赤い境界線が与えられます。
ユーザーは、フォームと対話する前に、困難な赤いボックスのセットに直面します。最初の送信後または値が変更された後に検証エラーを表示すると、より良い体験が得られます。そこで、JavaScriptが介入します…javaScriptおよび制約検証API
<span><span><span><label</span> for<span>="nameid"</span>></span>your name<span><span></label</span>></span> </span><span><span><span><input</span> type<span>="text"</span> id<span>="nameid"</span> name<span>="name"</span> /></span> </span>
制約検証APIは、標準のHTMLフィールドチェックを強化できるフォームカスタマイズオプションを提供します。できます:
カスタムスタイリングを使用したエラーメッセージを表示
ハンドラーは、すべてのフォームの入力が有効である場合にtrueを返すCheckAlivity()またはReportAlidivity()メソッドを使用してフォーム全体を有効にすることができます。 (違いは、CheckVality()が入力が制約検証の対象かどうかをチェックすることです。)
<span><span><span><input</span> type<span>="text"</span> name<span>="name"</span> value<span>=""</span> placeholder<span>="your name"</span> /></span> </span>Mozilla docs説明:
<span><span><span><input</span> type<span>="number"</span> min<span>="1"</span> max<span>="100"</span> required /></span> </span>無効なイベントもすべての無効なフィールドでトリガーされます。これはバブルではありません:ハンドラーは、それを使用するすべてのコントロールに追加する必要があります。
有効なフォームには、さらに検証チェックが発生する可能性があります。同様に、無効なフォームに無効なフィールドが強調表示される可能性があります
フィールド検証個々のフィールドには、次の制約検証プロパティがあります
<span>/* blue placeholder on email fields */ </span><span>input<span><span>[type="email"]</span>::placeholder</span> { </span> <span>color: blue; </span><span>} </span>willvalidate:要素が制約検証の候補である場合、trueを返します。 validationmessage:検証メッセージ。フィールドが有効な場合、これは空の文字列になります。 valitity:有効設定オブジェクト。これには、フィールドが有効な場合に有効なプロパティセットが真実です。それが間違っている場合、次のプロパティの1つ以上が真実になります:
culidityState
説明
.badinput
ブラウザは入力を理解できません
.Customerror
カスタム妥当性メッセージが設定されています
.patternmismatch
値は、指定されたパターン属性と一致しません
.RangeOverFlow
値は最大属性よりも大きい
.RangeUnderFlow
値はMIN属性よりも少ない
.StepMismatch
値は、ステップ属性ルールに適合しません
.toolong
文字列の長さは、最大属性よりも大きくなります
.tooshort
文字列の長さは、minlength属性よりも小さくなります
.typemismatch
値は有効な電子メールやURLではありません
.ValueEmissing
必要な値は空です
個々のフィールドには、次の制約検証方法があります
<span><span><span><input</span> type<span>="text"</span> name<span>="username"</span> /></span> </span>電子メールが指定されていないか無効である場合、スクリプトは
カスタムフォームの作成
<span><span><span><label</span>></span>your name <span><span><input</span> type<span>="text"</span> name<span>="name"</span> /></span><span><span><label</span>></span> </span>の作成
次のデモンストレーションは、ユーザー名と電子メールアドレス、電話番号、またはその両方を必要とする連絡先フォームの例を示しています。
<span><span><span><label</span> for<span>="nameid"</span>></span>your name<span><span></label</span>></span> </span><span><span><span><input</span> type<span>="text"</span> id<span>="nameid"</span> name<span>="name"</span> /></span> </span>
Formvalidateという名前の汎用フォーム検証クラスを使用して実装されています。オブジェクトをインスタンス化すると、フォーム要素が渡されます。オプションの2番目のパラメーターを設定できます:
ユーザーが対話するときに各フィールドを検証するのに忠実ですfalse(デフォルト)最初の送信後にすべてのフィールドを検証する(その後、フィールドレベルの検証が発生します)
無効なフィールドには、CSSを使用して赤いヘルプメッセージを表示するフィールドの親要素に無効なクラスが適用されます。
最後に、フォーム全体が有効である場合、オブジェクトはカスタム送信関数を呼び出します:
代わりに、標準のaddEventListenerを使用してフォームの送信イベントを処理することができます。FormValidateは、フォームが無効である場合にさらにハンドラーの実行を防ぐためです。
<span><span><span><input</span> type<span>="text"</span> name<span>="username"</span> /></span> </span>form finesse
フォームはすべてのWebアプリケーションの基礎であり、開発者はユーザー入力の操作にかなりの時間を費やしています。制約検証は十分にサポートされています:ブラウザはほとんどのチェックを処理し、適切な入力オプションを表示できます。
可能な場合は標準のHTML入力タイプを使用します。 Min、Max、Step、Minlength、MaxLength、Pattern、required、inputMode、およびAutocomplete属性を必要に応じて設定します。
必要に応じて、少しJavaScriptを使用して、カスタム検証とメッセージを有効にします。 より複雑なフィールドの場合、標準入力を徐々に強化します
HTML5は、フォーム検証をより簡単かつ効率的にするいくつかの新しいフォーム要素と属性を導入します。たとえば、電子メール、URL、番号などの新しい入力タイプを提供し、タイプに基づいて入力データを自動的に検証します。また、入力データのさまざまな制約を指定できるように、必要な、パターン、Min/MAXなどの新しい属性を導入します。さらに、HTML5は、JavaScriptを使用してカスタム検証を実行できるようにするビルトイン検証APIを提供します。一人で。 HTML5は、入力データのさまざまな制約を指定できるいくつかの新しい入力タイプと属性を提供します。たとえば、必要な属性を使用してフィールドを必須にすること、パターン属性を特定するためのパターン属性、およびMIN/MAX属性を強制して、数値入力の範囲を設定できます。ただし、より複雑な検証を行うには、JavaScriptを使用する必要がある場合があります。 HTML5は、非同期検証をボックスからサポートしません。ただし、JavaScriptを使用してこれを実現できます。 Ajaxリクエストなどの非同期操作を実行し、結果に基づいてカスタム有効性メッセージを設定するカスタム検証関数を記述できます。 Fieldsの入力/変更イベントまたはフォームの送信イベントに応じてこの関数を呼び出すことができます。
以上がHTMLフォームと制約検証の完全なガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。