序文Web ページを作成するときに、次のような状況に遭遇することはよくあります。 <本文> <div class="btns-wrapper"></div> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <スクリプト> var ラッパー = $('.btns-wrapper'); (var i = 0; i < 5; i++){ var btn = $('<button>ボタン' + i + '</button>').appendTo(wrapper); btn.on('クリック', 関数(evt){ console.log('ボタンをクリックしてください: ' + i); }); } </スクリプト> </本文> コードは非常にシンプルで、ページ上にいくつかのボタンを作成し、ボタンのクリックイベントを定義するだけです。 しかし、ボタンをクリックすると、取得されるシリアル番号は常に i の最後の値である 5 であることがわかります。 これは、クリック イベントを定義するために使用される匿名関数が同じ変数 i を参照するためです。 解決策1: すぐに実行するvar ラッパー = $('.btns-wrapper'); (var i = 0; i < 5; i++){ var btn = $('<button>ボタン' + i + '</button>').appendTo(wrapper); //デフォルトメソッド //btn.on('click', function(evt){ // console.log('ボタンをクリックします: ' + i); // //); //方法1: すぐに実行 btn.on('click', (function(n){ 関数を返す(evt){ console.log('ボタンをクリックしてください: ' + n); } })(私)); } このアプローチは、イベントを定義するときに各ボタンに直接個別の匿名関数(クロージャ)を作成し、各関数が正しいi変数を保持するというものである。 解決策2: jQueryイベントパスを使用するvar ラッパー = $('.btns-wrapper'); (var i = 0; i < 5; i++){ var btn = $('<button>ボタン' + i + '</button>').appendTo(wrapper); //デフォルトメソッド //btn.on('click', function(evt){ // console.log('ボタンをクリックします: ' + i); // //); //方法 2: JQuery イベントパラメータを使用する btn.on('click', { i: i }, function(evt){ console.log('ボタンをクリックします: ' + evt.data.i); }); } この方法ははるかに簡単です。jQuery を使用して、パラメータ本体を匿名関数に渡すだけです。 解決策3: DOMのデータ属性を使用するvar ラッパー = $('.btns-wrapper'); (var i = 0; i < 5; i++){ var btn = $('<button>ボタン' + i + '</button>').appendTo(wrapper); //デフォルトメソッド //btn.on('click', function(evt){ // console.log('ボタンをクリックします: ' + i); // //); //方法 3: DOM のデータ属性を使用する btn.data('i', i); btn.on('クリック', 関数(evt){ console.log('ボタンをクリックしてください:' + $(this).data('i')); }); } この方法も非常にシンプルですが、データ属性を使用して構造化データを定義できないという欠点があります。 要約する全体的に、jQuery 環境であれば、イベントパラメータを使用して変数を渡すのが最も簡単で、構造化されたデータを渡すことができます。 それ以外の場合は、即時実行(クローズ)を通じてのみ実行できます。 JavaScript のサブ関数が外部変数にアクセスする方法についてはこれで終わりです。JavaScript のサブ関数が外部変数にアクセスする方法についての詳細は、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Centos 7.4 でリモート アクセス制御を実装する方法
>>: クエリでのMySQLのユニークキーの使用と関連する問題
目次1. マップされた型2. マッピング修飾子3. キーの再マッピング4. さらなる探究序文: Ty...
MySql バッチ挿入の最適化 SQL 実行効率の例の詳細な説明itemcontractprice ...
黄金律常に同じコーディング標準セットに従ってください。同じプロジェクトに何人の人が関わっているかに関...
HTML で CSS を使用する 3 つの方法: 1. インラインスタイル: 要素のスタイル属性を通...
rpm パッケージのインストールは比較的簡単なので、ここでは説明しません。ほとんどのオープンソース ...
Web ページのデザインに関する質問です。すべてに答えられるでしょうか? 1. 単一選択の質問 (...
目次1. 切り捨て操作1.1 MySQL truncate はどのような操作を実行しますか? 1.2...
MySQL インストール パッケージをダウンロードします。mysql-8.0.11-winx64 を...
目次1. テスト環境1.1 ハードウェアとソフトウェア1.2 テーブル構造2. テストの目的2.1 ...
今日はMySQLのインストール方法を学びましたが、その過程でいくつか問題が発生しました。関連記事をい...
機能シナリオを簡単に説明しましょう。データ行フィールドは次のとおりです。名前開始日時タイプこの表では...
MongoDB のインストール プロセスと問題記録1. MongoDBのインストールMongoDBを...
1. ユーザーとグループを追加する1. mysqlユーザーグループを追加する # グループ追加mys...
目次Tomcat の紹介Tomcat の展開Web プロジェクトの作成tomcatの設定プロジェクト...
Flexbox レイアウト モジュールは、コンテナー内のスペースをより効率的に配分する方法を提供する...