ログインボックスのメールプロンプトを実装するネイティブJS

ログインボックスのメールプロンプトを実装するネイティブJS

この記事では、登録またはログイン時に電子メール アドレスを入力する際のドロップダウン プロンプトのネイティブ JS 実装を紹介します。効果は次のとおりです。

実装コードは次のとおりです。

<!DOCTYPE html>
<html>
 
<ヘッド>
    <meta http-equiv="コンテンツタイプ" コンテンツ="text/html; charset=utf-8" />
    <title>ログイン ボックス プロンプトを実装するネイティブ JS</title>
    <スタイル>
        * {
            マージン: 0;
            パディング: 0;
        }
 
        体 {
            フォント: 12px/1.125 Arial、Helvetica、sans-serif;
        }
 
        li {
            リストスタイル: なし;
        }
 
        #ログイン {
            幅: 252px;
            高さ: 385px;
            /* カラー背景画像 */
            背景: url(images/0.jpg) 繰り返しなし;
            マージン: 20px 自動;
            位置: 相対的;
        }
 
        。詳細 {
            マージン: 0 0 5px 30px;
            位置: 相対的;
            上: 110px;
        }
 
        .詳細入力{
            色: #999999;
            境界線: 1px 実線 #74C8E5;
            境界線の半径: 3px 3px 3px 3px;
            高さ: 15px;
            行の高さ: 14px;
            パディング: 8px 5px 7px;
            幅: 184ピクセル;
        }
 
        #提案する {
            背景: なし 繰り返しスクロール 0 0 #FFFFFF;
            境界線: 1px 実線 #CCCCCC;
            左: 30px;
            マージン: 0;
            オーバーフロー: 非表示;
            パディング: 0;
            位置: 絶対;
            テキスト配置: 左;
            上: 142px;
            可視性: 可視;
            幅: 194ピクセル;
            zインデックス: 1;
            表示: なし;
        }
 
        。注記、
        。アイテム {
            クリア: 両方;
            色: #999999;
            カーソル: ポインタ;
            フォントサイズ: 12px;
            高さ: 20px;
            行の高さ: 20px;
            リストスタイル: none の外側は none;
            マージン: 0 1px;
            パディング: 0 5px;
            空白: ラップなし;
        }
 
        。アクティブ {
            空白: ラップなし;
            クリア: 両方;
            色: rgb(153, 153, 153);
            カーソル: ポインタ;
            フォントサイズ: 12px;
            高さ: 20px;
            行の高さ: 20px;
            リストスタイル: none の外側は none;
            マージン: 0pt 1px;
            パディング: 0pt 5px;
            背景: なし 繰り返しスクロール 0% 0% rgb(232, 244, 252);
        }
    </スタイル>
    <スクリプト>
 
        //ページが読み込まれたとき window.onload = function () {
            //コンストラクタを作成する var s1 = new Suggest();
            // s1.init() を初期化します。
        };
 
        //コンストラクタ関数Suggest() {
            //ユーザー名入力ボックスを取得します。this.oInput = document.getElementById('input1');
            //ドロップダウン リストのプロンプト ボックスを取得します。this.oUl = document.getElementById('suggest');
            //ドロップダウンリスト項目を取得します。this.aLi = this.oUl.getElementsByTagName('li');
        }
 
        //コンストラクタにプロトタイプメソッドを追加する Suggest.prototype = {
            // 初期化 init: function () {
                //入力が変更されたとき this.toChange();
                //カーソルが離れたら this.toBlur();
            },
            //エッジが引き続き変更をトリガーする場合、toChange: function () {
 
                //連続入力イベントを追加し、すべてのブラウザと互換性を持たせます var ie = !-[1,];
                var これ = これ;
 
                もし(つまり){
                    this.oInput.onpropertychange = 関数(){
                        //IEで入力値が空の場合にドロップダウンプロンプトボックスがトリガーされないようにする if (This.oInput.value == '') {
                            これはヒントです。
                            戻る;
                        }
                        //ドロップダウンリストボックスを表示します。This.thowUl();
                        //ヒントを表示This.tips();
                        //inputThis.sel(0); の場合のデフォルト選択
                    };
                } それ以外 {
                    this.oInput.oninput = 関数 () {
                        //ドロップダウンリストボックスを表示します。This.thowUl();
                        //ヒントを表示This.tips();
                        //inputThis.sel(0); の場合のデフォルト選択
                    };
                }
            },
            //ドロップダウンリストボックスを表示する thowUl: function () {
                this.oUl.style.display = 'ブロック';
            },
            //カーソルが離れたらドロップダウン表示ボックスを非表示にする toBlur: function () {
                var これ = これ;
                this.oInput.onblur = 関数 () {
                    This.oUl.style.display = 'なし';
                };
            },
 
            //入力すると、プロンプト内のスペースがそれに応じて変化します。ヒント: function () {
                var 値 = this.oInput.value;
 
                //メールボックスの正規表現を定義します (@ プラス @ の後に入力された値とスペース)
                var re = new RegExp('@' + value.substring(value.indexOf('@') + 1) + '');
 
                //ドロップダウンリストを初期化する //入力をクリアした後にドロップダウンリストが表示されないようにする for (var i = 1; i < this.aLi.length; i++) {
                    this.aLi[i].style.display = 'ブロック';
                    this.aLi[i].bBtn = true;
                }
 
                if (re.test(値)) {
                    // すべての li のカスタム属性を取得します (最初の li を除く)
                    (var i = 1; i < this.aLi.length; i++) {
                        var oEmail = this.aLi[i].getAttribute('email');
                        //最初に選択されたliに直接値を割り当てる if (i == 1) {
                            //入力値をliに代入する
                            this.aLi[i].innerHTML = 値;
 
                        } それ以外 {
                            if (re.test(oEmail)) {
                                this.aLi[i].style.display = 'ブロック';
                                this.aLi[i].bBtn = true;
                            } それ以外 {
                                this.aLi[i].style.display = 'なし';
                                this.aLi[i].bBtn = false;
                            }
                        }
                    }
                } それ以外 {
                    // すべての li のカスタム属性を取得します (最初の li を除く)
                    (var i = 1; i < this.aLi.length; i++) {
                        var oEmail = this.aLi[i].getAttribute('email');
                        //取得したoEmail値が空の場合、初めてif (!oEmail) {
                            //入力値をliに代入する
                            this.aLi[i].innerHTML = 値;
                        } それ以外 {
                            //liの内容は入力値とその属性値の合計です。this.aLi[i].innerHTML = value + oEmail;
                        }
                    }
                }
            },
            //プロンプトリスト項目選択メソッド sel: function (iNow) {
 
                var これ = これ;
                var arr = [];
 
                //プロンプトを選択した後、再入力すると、選択した項目をデフォルトのスタイルに復元します for (var i = 1; i < this.aLi.length; i++) {
                    this.aLi[i].className = 'アイテム';
                    if (this.aLi[i].bBtn) {
                        arr.push(this.aLi[i]);
                    }
                }
 
                //入力内容が空の場合 if (this.oInput.value == '') {
                    //スタイルはアイテム
                    arr[iNow].className = 'アイテム';
                    //入力内容が空でない場合} else {
                    //スタイルはアクティブです
                    arr[iNow].className = 'アクティブ';
                }
 
 
                //すべてのドロップダウンヒントにマウス移動イベントを追加します for (var i = 1; i < arr.length; i++) {
                    arr[i].インデックス = i;
                    //マウスが動いたとき arr[i].onmouseover = function () {
                        //すべてのliのスタイルをデフォルトのスタイルに復元します for (var i = 1; i < This.aLi.length; i++) {
 
                            This.aLi[i].className = 'item';
                        }
                        //現在のオプションにアクティブとしてスタイルを追加します
                        this.className = 'アクティブ';
                        インデックス
                    };
 
                    //マウスがクリックされたら、現在のプロンプトオプションの内容を入力値に置き換えます。arr.onmousedown = function () {
                        this.oInput.value = this.innerHTML;
                    };
                }
 
                //キーボードイベントを追加 document.onkeydown = function (ev) {
                    // イベントを互換性のあるものにする var ev = ev || window.event;
                    // (ev.keyCode == 38) の場合 {
                        iNow == 0 の場合
                            iNow = arr.length - 1;
                        } それ以外 {
                            今--;
                        }
                        (var i = 1; i < This.aLi.length; i++) {
                            This.aLi[i].className = 'item';
                        }
                        arr[iNow].className = 'アクティブ';
                        //次へ} else if (ev.keyCode == 40) {
                        //iNowが最後の場合は、値0を割り当てます
                        iNow == arr.length - 1 の場合 {
                            iNow = 0;
                        } それ以外 {
                            iNow++;
                        }
                        // すべてのliスタイルをデフォルトスタイルにクリアします for (var i = 1; i < This.aLi.length; i++) {
                            This.aLi[i].className = 'item';
                        }
                        //現在のオプションにアクティブスタイルを追加します。arr[iNow].className = 'active';
                        //Enter} else if (ev.keyCode == 13) {
                        //現在のプロンプトオプションの内容を入力値に置き換えます。This.oInput.value = arr[iNow].innerHTML;
                        //カーソルを入力ボックスから離し、ドロップダウン リスト項目を閉じます。This.oInput.blur();
                    }
                };
 
            }
        };
    </スクリプト>
</head>
 
<本文>
    <div id="ログイン">
 
        <div class="詳細">
            <input id="input1" type="text" maxlength="128" placeholder="メールアドレス/会員アカウント/携帯電話番号" autocomplete="off"
                node-type="ログイン名" class="名前" tabindex="1" name="ログイン名">
        </div>
 
        <div class="詳細">
            <input type="password" maxlength="24" placeholder="パスワードを入力してください" node-type="password" class="pass" tabindex="2"
                名前="パスワード">
        </div>
 
        <ul id="提案">
            <li class="note">メールの種類を選択してください</li>
            <li メール="" class="item"></li>
            <li email="@sina.com" class="item">@sina.com</li>
            <li email="@163.com" class="item">@163.com</li>
            <li email="@qq.com" class="item">@qq.com</li>
            <li email="@126.com" class="item">@126.com</li>
            <li email="@vip.sina.com" class="item">@vip.sina.com</li>
            <li email="@sina.cn" class="item">@sina.cn</li>
            <li email="@hotmail.com" class="item">@hotmail.com</li>
            <li email="@gmail.com" class="item">@gmail.com</li>
            <li email="@sohu.com" class="item">@sohu.com</li>
            <li email="@yahoo.cn" class="item">@yahoo.cn</li>
            <li email="@139.com" class="item">@139.com</li>
            <li email="@wo.com.cn" class="item">@wo.com.cn</li>
            <li email="@189.cn" class="item">@189.cn</li>
        </ul>
    </div>
</本文>
 
</html>

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

以下もご興味があるかもしれません:
  • ログインボックスのドラッグ効果を実現するためのJavascript
  • jsはポップアップウィンドウをクリックすることでポップアップログインボックスを実装します
  • jsはログインボックスのマウスドラッグ効果を実現します
  • js は Baidu ログイン ボックスのマウス ドラッグ効果を実現します
  • ネイティブ js でドラッグ可能なログイン ボックス効果を実現
  • js は、チェックボックスで匿名ログインを選択した場合にログインボックスを非表示にする効果を実現します。

<<:  MySQL でストリーミングクエリを使用してデータ OOM を回避する

>>:  HTML テーブルタグチュートリアル (32): セルの水平方向の配置属性 ALIGN

推薦する

CSSスタイルは、テキストが長すぎる場合に省略記号を表示する問題を解決します

1. CSSスタイルは、テキストが長すぎる場合に省略記号を表示する問題を解決します1. 一般的なスタ...

react setStateの詳細な説明

目次setState は同期ですか、それとも非同期ですか?カスタム合成イベントと React フック...

MySQL count(1)、count(*)、count(field)の違い

目次1. COUNTの初見2. COUNT(フィールド)、COUNT(定数)、COUNT(*)の違い...

react-diagram シリアル化 Json 解釈 ケース分析

このドキュメントの目的はreact-diagramフレームワーク モデルの Json シリアル化を説...

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

目次1. docker環境が正常かどうかを確認する2. miniIOイメージをダウンロードする3. ...

Dockerの急速な拡張の高度な方法

1. コマンド方式作成された Swarm クラスターで nginx サービスを実行し、--repli...

アルバムと写真をアルバムに保存するためのWeChatアプレット

私は現在、Xiao Nian Gao に似たビデオおよびツール アプリを開発しています。ユーザーが作...

一般的な JavaScript 文字列メソッド 28 個と使用方法のヒントのまとめ

目次序文1. 文字列の長さを取得する2. 文字列の指定された位置の値を取得する(1) charAt(...

アップロード画像コントロールを実現するネイティブ js

この記事の例では、アップロード画像コントロールを実装するためのjsの具体的なコードを参考までに共有し...

Alibaba Cloud に Docker をインストールする際の問題と解決策

質問Alibaba Cloud イメージを使用して Docker をインストールすると、次の図に示す...

JavaScript の便利な配列トリック 12 選

目次アレイ重複排除1. from() を新しい Set() メソッドに重ねる2. スプレッド演算子 ...

HTML チュートリアル: 画像のサイズ、配置、間隔、境界線の属性を変更する方法

画像タグ: <img> ページに画像を挿入するには、「src」属性を持つ「img」タグを...

dockercompose を使用して springboot-mysql-nginx アプリケーションをビルドする

前回の記事では、Docker を使用して、コンパイルされた jar パッケージをイメージに組み込む ...

k8sとDockerの関係についての簡単な説明

最近、プロジェクトでは kubernetes (以下、k8s と表記、k と s の間には 8 つの...

CSS ピックアップ矢印、カタログ、アイコン実装コード

1. CSS その他のアイコンアイコンを作成するには 3 つの方法があります。写真css (小さな矢...