純粋な CSS でフォ​​ーム検証を実装するためのサンプル コード

純粋な CSS でフォ​​ーム検証を実装するためのサンプル コード

日常業務において、フォームの検証は非常に一般的な設計要件です。ログイン ボックスや登録ボックス、アンケートでもフォームの検証が必要です。

一般的に、私たちの実装の考え方は、JS が入力ボックスの入力内容を監視し、ユーザーの入力内容を判別して、次の操作を決定するというものです。

たとえば: (次の例は、優れたオープンソース UI ライブラリである element からのものです)

<el-form :model="numberValidateForm" ref="numberValidateForm" label-width="100px" class="demo-ruleForm">
  <el-フォーム項目
    label="年齢"
    プロパティ="年齢"
    :ルール="[
      {必須: true、メッセージ: '年齢は空欄にできません'},
      { タイプ: 'number'、メッセージ: '年齢は数値でなければなりません'}
    ]"
  >
    <el-input type="age" v-model.number="numberValidateForm.age" autocomplete="off"></el-input>
  </el-form-item>
  <el-form-item>
    <el-button type="primary" @click="submitForm('numberValidateForm')">送信</el-button>
    <el-button @click="resetForm('numberValidateForm')">リセット</el-button>
  </el-form-item>
</el-form>
<スクリプト>
  エクスポートデフォルト{
    データ() {
      戻る {
        数値検証フォーム: {
          年: ''
        }
      };
    },
    メソッド: {
      送信フォーム(フォーム名) {
        this.$refs[formName].validate((valid) => {
          (有効)の場合{
            alert('送信!');
          } それ以外 {
            console.log('送信エラー!!');
            false を返します。
          }
        });
      },
      resetForm(フォーム名) {
        this.$refs[フォーム名].resetFields();
      }
    }
  }
</スクリプト>

上記は正規表現検証ですが、基本的には JS で完了しています。では、これを CSS で実装することはできるでしょうか?答えはイエスです。こちらがデモです

CSS によるフォーム検証の実装

上記のフォーム検証は CSS によって完全に実装されており、コア属性はCSS Level 4 Validityです。 :valid:invalidのプロパティを使用して<input>valueを判断するという考え方です。

完全なコードはこちら

/*
 * css
 */
 :根 {
 	--エラー色: 赤;
 }
 .form > 入力 {
 	下マージン: 10px;
 }
 .form > .f-tips {
 	色: var(--error-color);
 	表示: なし;
 }
 input[type="text"]:無効 ~ input[type="submit"],
 入力[type="password"]:無効 ~ 入力[type="submit"] {
 	表示: なし;
 }
 入力[必須]:無効 + span {
 	表示: インライン;
 }
 
 /*
  *html
  */
<form class="form" id="form" method="get" action="/api/form">
    アカウント:
    <input data-title="アカウント" pattern="[\w]{6,10}" name="アカウント" type="text" 必須 />
    <span class="f-tips">正しい口座番号を入力してください</span>
    <br />
    パスワード:
    <input data-title="パスワード" pattern="[\w]{6,10}" name="パスワード" type="パスワード" 必須 />
    <span class="f-tips">正しいパスワードを入力してください</span>
    <br />
    <input name="button" type="submit" value="送信" />
</フォーム>

エフェクトのスクリーンショット

使用される知識ポイント

1. HTML5<input>の新しい属性: pattern

MDN の説明:

コントロールの値をチェックするための正規表現。パターンは、値の一部ではなく、値全体に一致する必要があります。ユーザーの役に立つように、title 属性を使用してモードを説明します。この属性は、type 属性の値が text、search、tel、url、または email の場合に適用されます。それ以外の場合は無視されます。 (IE10以降に対応)

述べる:

pattern内の検証ルールが不正な場合、たとえば長さチェックでスペースが多すぎる場合、コンソールにエラーが報告されます。詳細は次のとおりです。

<input data-title="アカウント" pattern="/[\w]{6, 10}/" name="アカウント" type="text" 必須 />

CSSJSの検証ルールは異なります。以下の記述は無効になります。コア検証ルールは[]で囲む必要があります。(現在、テストしたいくつかの例でこのようになっています。具体的な詳細はデータで確認する必要があります。より具体的な情報をご存知の方がいらっしゃいましたら、ぜひ教えてください。ありがとうございます!)

<input data-title="アカウント" pattern="/\w{6,10}/" name="アカウント" type="text" 必須 />

2. CSS Level 4 選擇器の新しいプロパティ: invalid

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

<<:  デザイナーはコーディングを学ぶ必要がありますか?

>>:  フロントエンド JavaScript ハウスキーパー package.json

推薦する

モバイルデバイスでインラインスクロールを実装するための4つのソリューションの詳細な説明

ニーズの発見領域の一部のみスクロールでき、残りの部分は移動できない場合、どのような方法を使用しますか...

Linux LVM 論理ボリューム構成プロセス (作成、増加、削減、削除、アンインストール) の詳細な説明

Linux LVM論理ボリューム構成プロセスの詳細な説明多くの Linux ユーザーは、オペレーティ...

ウェブサイトのビジュアルデザインパスはユーザーの習慣に合わせる必要がある

クーパー氏は、一般的に上から下、左から右に向かうユーザーの視覚経路について話しました。優れたビジュア...

数千万のMySQLデータ量を素早くページ分割する方法

序文バックエンド開発では、一度に大量のデータがロードされ、メモリやディスク IO のオーバーヘッドが...

一般的な CSS プロパティのブラウザ互換性の概要 (推奨)

CSS プロパティのブラウザ互換性をまとめる必要があるのはなぜですか?使用する際は、Can I U...

dockerにros2をインストールするための詳細な手順

目次メイントピック1. UbuntuにDockerをインストールする2. DockerにROS2-F...

Ubuntu 18.04 コマンドでタッチパッドを無効/有効にする

Ubuntu では、ショートカット キーでタッチパッドをオフにできない状況によく遭遇します。この問題...

Vue カプセル化に基づくプルダウン更新およびプルアップ読み込みコンポーネント

VueとネイティブJavaScriptカプセル化に基づいて、プルダウンリフレッシュとプルアップロード...

HTMLベースの複数画像アップロードのプレビュー機能を実装

最近、Web ページに複数の画像をアップロードするためのスクリプトを作成しました。これは非常に実用的...

Linux で pip 操作中にタイムアウトが発生する問題を解決する方法

Linuxインスタンスでpipを使用する際のタイムアウト問題を解決する方法pip は最も人気のある ...

js 正規表現の先読みと後読み、および非キャプチャグループ化

目次先読みと後読みをキャプチャグループと組み合わせる捕獲グループと非捕獲グループ前を向いて、後ろを振...

自動ヘルスレポートを実現するDocker+Selenium方式

この記事では、ある大学の健康報告システムを例に、Web 側の自動化操作を完成させます。使用したテクノ...

MySQL 文字セットの概要

目次文字セット比較ルール4つのレベルの文字セットと比較規則3つのシステム変数このノートは主にMySQ...

Vue3の一般的なAPIの使用方法の紹介

目次ライフサイクルの変化反応的な参照vue2.x では ref を使用して要素タグを取得します。vu...

Macシステムをインストールした後にVMWareがフルスクリーンで表示できない問題を解決する

システム: VMTOOLs ダウンロード:リンク: https://pan.baidu.com/s/...