複数クリックを防ぐVueの実践

複数クリックを防ぐVueの実践

通常、クリック イベントは、メッセージ リマインダーのさまざまな状況に分割されます。これらが処理されない場合、数秒以内に多くのプロンプト メッセージがポップアップ表示され、非常に煩わしくなります。例:

このプロンプト メッセージが 1 回だけ表示されるように制御するにはどうすればよいですか?

次に、クリックイベントメソッドを先頭に追加します

クリックイベントで対応する操作を実行するかどうかを制御するための変数hasRemindを定義します。

ユーザーが初めてクリックしたときは、hasRemind = false です。このとき、2 番目の if 文に入り、hasRemind の値が true に変更されます。3 秒後、hasRemind の値は再び false に変更されます。この場合、ユーザーはクリック イベント内のすべてのプロセスを正常に入力できます。

ユーザーが2回目にクリックすると、hasRemind=trueとなり、クリックイベントはそのまま終了します。クリックメソッド内の一連の処理は、hasRemindの値がfalseの場合にのみ継続できます。

//デフォルトでは、ログインをトリガーできるクリックイベントには、Remind:false が設定されています。
// 連続した複数のクリックを防ぐ let vm = this;
this.hasRemind === true の場合、戻り値:
if (this.hasRemind === false) {
    this.hasRemind = true;
    setTimeout(関数(){
       vm.hasRemind = false;
    },3000)
}

(ここでは、上記のコード スニペットをログイン クリック イベントに配置することで、ユーザーがこれを複数回クリックして複数のプロンプト メッセージが表示されるのを防止します。)

 // "個人ログインクリックイベント"
            レジスタボタン() {
                // 連続した複数のクリックを防ぐ let vm = this;
                this.hasRemind === true の場合、戻り値:
                if (this.hasRemind === false) {
                    this.hasRemind = true;
                    setTimeout(関数(){
                        vm.hasRemind = false;
                    },3000)
                }
                var qs = Qs;
                (this.logintype == 1)の場合{
                    //アカウントとパスワードのログイン if (this.username == "") {
                        this.$メッセージ({
                            メッセージ: 「口座番号を入力してください」
                            タイプ: '警告'
                        });
                        false を返します。
                    }
                    そうでない場合 (this.password == "") {
                        this.$メッセージ({
                            メッセージ: 'パスワードを入力してください'
                            タイプ: '警告'
                        });
                        false を返します。
                    } それ以外 {
                        request_POST('/login', qs.stringify({
                            アイデンティティ: this.username、
                            desStr: this.password、
                            ログインタイプ: 1,
                            ログインロール: 0
                        })).then((res) => {
                            (res.data.code == 200)の場合{
                                localStorage.setItem("token", res.data.data["JEECMS-Auth-Token"]);
                                //ログイン成功// window.open(this.apiHost + 'uesr/resume', '_parent')
                                window.open(this.apiHost + 'index/index', '_parent')
                            } そうでない場合 (res.data.code == 12462) {
                                this.$メッセージ({
                                    メッセージ: 「ユーザーは登録されていません」
                                    タイプ: '警告'
                                });
                                // 登録ページにジャンプ setTimeout(() => {
                                    window.open(this.apiHost + 'userregister/userregister',
                                        '_自己');
                                }, 1000)
                            } else if (res.data.code == 12468) { //ユーザーにはユーザー名とパスワードがありません localStorage.setItem("token", res.data.data["JEECMS-Auth-Token"]);
                                window.open(this.apiHost + 'uesr/enterAccount', '_parent');
                            } else if (res.data.code == 604) { //ユーザーには履歴書がありません localStorage.setItem("token", res.data.data["JEECMS-Auth-Token"]);
                                ウィンドウを開きます(this.apiHost + 'uesr/fillresume', '_parent');
                            } else if (res.data.code == 1077) { // 履歴書はレビューに合格できませんでした localStorage.setItem("token", res.data.data["JEECMS-Auth-Token"]);
                                ウィンドウを開きます(this.apiHost + 'uesr/fillresume', '_parent');
                            } else if (res.data.code == 1075) { //進行中のレビューを再開 localStorage.setItem("token", res.data.data["JEECMS-Auth-Token"]);
                                window.open(this.apiHost + 'uesr/audit', '_parent');
                            } それ以外 {
                                this.$message.error(res.data.message);
                            }
                        })
                    }
                } それ以外 {
                    //認証コード loginif (this.phone == "") {
                        this.$メッセージ({
                            メッセージ: 「電話番号を入力してください」
                            タイプ: '警告'
                        });
                        false を返します。
                    } そうでない場合 (!(/^(13[0-9]|14[5-9]|15[012356789]|166|17[0-8]|18[0-9]|19[8-9])[0-9]{8}$/.test(
                            this.phone))) {
                        this.$メッセージ({
                            メッセージ:「有効な電話番号を入力してください」
                            タイプ: '警告'
                        });
                        false を返します。
                    } それ以外の場合 (this.code == "") {
                        this.$メッセージ({
                            メッセージ: 「確認コードを入力してください」
                            タイプ: '警告'
                        });
                        false を返します。
                    } それ以外 {
                        request_POST('/login', qs.stringify({
                            アイデンティティ: this.phone、
                            キャプチャ: this.code、
                            ログインタイプ: 2,
                            ログインロール: 0
                        })).then((res) => {
                            (res.data.code == 200)の場合{
                                localStorage.setItem("トークン", res.data.data["JEECMS-Auth-Token"]);
                                window.open(this.apiHost + 'uesr/resume', '_parent');
                            } そうでない場合 (res.data.code == 12462) {
                                this.$メッセージ({
                                    メッセージ: 「ユーザーは登録されていません」
                                    タイプ: '警告'
                                });
                                // 登録ページにジャンプ setTimeout(() => {
                                    window.open(this.apiHost + 'userregister/userregister',
                                        '_自己');
                                }, 1000)
                            } else if (res.data.code == 12468) { //ユーザーにはユーザー名とパスワードがありません localStorage.setItem("token", res.data.data["JEECMS-Auth-Token"]);
                                window.open(this.apiHost + 'uesr/enterAccount', '_parent');
                            } else if (res.data.code == 604) { //ユーザーには履歴書がありません localStorage.setItem("token", res.data.data["JEECMS-Auth-Token"]);
                                ウィンドウを開きます(this.apiHost + 'uesr/fillresume', '_parent');
                            } else if (res.data.code == 1077) { // 履歴書はレビューに合格できませんでした localStorage.setItem("token", res.data.data["JEECMS-Auth-Token"]);
                                ウィンドウを開きます(this.apiHost + 'uesr/fillresume', '_parent');
                            } else if (res.data.code == 1075) { //進行中のレビューを再開 localStorage.setItem("token", res.data.data["JEECMS-Auth-Token"]);
                                window.open(this.apiHost + 'uesr/audit', '_parent');
                            } それ以外 {
                                this.$message.error(res.data.message);
                            }
                        })
                    }
                }
            },

Vue での複数クリックを防止する実践に関するこの記事はこれで終わりです。Vue での複数クリックを防止するためのより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vueは、短時間に連続してクリックされた後に複数のトリガーリクエストが発生するのを防ぎます。
  • Vueカスタム命令に基づいてボタンレベルの権限制御を実装するアイデアの詳細説明
  • Vue ボタンを複数回クリックするとデータが繰り返し送信される問題を解決する
  • Vue ディレクティブはボタンクリックの解析を防止します

<<:  MySQL 5.7.27 のインストールと設定方法のグラフィックチュートリアル

>>:  Win32 MySQL 5.7.27 のインストールと設定方法のグラフィックチュートリアル

推薦する

MySQL の instr を使用したファジー クエリ メソッドの紹介

MySQL の内部関数instrを使用すると、従来の like クエリ メソッドを置き換えることがで...

MySQL の選択、挿入、更新バッチ操作ステートメントのコード例

プロジェクトでは、データを操作するためにバッチ操作ステートメントが必要になることがよくあります。バッ...

VMWare12 グラフィックチュートリアルで Apple Mac OS X をインストールする

1. はじめに:友人はシステム知識を学びたいと考えており、Apple のラップトップを使用していまし...

JavaScript の基礎: 即時実行関数

目次関数フォーマットを即時実行関数を即座に実行する他の方法 – 式即時実行される関数はパラメータを取...

Vueはデータを初期状態にリセットします

場合によっては、データ内のデータを再利用する必要がありますが、データ内のデータはさまざまなフォーム、...

JavaScript を使用してセカンダリ メニューを作成する

この記事では、セカンダリメニュー効果を実現するためのJavaScriptの具体的なコードを参考までに...

Docker を使用した war パッケージ プロジェクトのデプロイの実装

Docker で war をデプロイするには、コンテナを使用する必要があります。ここでは tomca...

IE6/7 における a.getAttribute(href,2) 問題の分析と解決

簡単な説明<br />IE6および7では、一般的なaタグ(HTMLで記述され、DOM操作...

Javascriptはセキュリティ検証に整合性属性を使用します

目次1. スクリプトタグを使用してファイルをインポートする1. ローカルファイルをインポートする2....

Windows Apache 環境で SSL 証明書を展開して、Web サイトを https 対応にする方法

SSL 証明書の使用についてはここでは説明しません。SSL 証明書を導入する必要がある友人は、すでに...

Node はあいまい検索用の検索ボックスを実装します

この記事の例では、検索ボックスでファジークエリを実装するためのNodeの具体的なコードを参考までに共...

docker compose の使い方の詳しい説明

目次Docker Compose の使用シナリオ基本的なデモ基本的な操作とメンテナンスdocker-...

Linux ディスク領域解放問題の概要

IDC のサーバーの /partition 使用率がいっぱいです。 100% に到達しました!確認し...

MySQL がデータの削除と挿入に非常に時間がかかる問題の解決策

会社の開発者がテスト環境で挿入ステートメントを実行すると、正常に実行されるまでに 10 秒以上かかり...

jQueryはシャトルボックス機能を実現する

この記事では、シャトルボックス機能を実現するためのjQueryの具体的なコードを参考までに紹介します...