序文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. nacosデータベースを再開します。データベース名nacos_configユーザー名とパスワー...
まず、MySQLをskip-grant-tablesモードで起動します: mysqld --skip...
プロジェクトシナリオプロジェクトの背景全体にカスタム透かしを追加します。透かしのテキスト、フォントの...
HTMLでは、中国語のフレーズ「學好好學」は「學好好學」と表現できます。プロジェクトでは、SMSアラ...
Pure jsは、参照用にワンクリックで編集可能なテーブル(トランスクリプトに似たもの)を実装してい...
目次1. 環境設定1.NTPサーバー2. ビジネスサーバー2. NTPサーバーの設定1. chron...
目次長すぎて読めないコンポーネントスタイルの分離デモテスト優先度ページの分離構成参考文献ネイティブ ...
重要なポイント: 1. CSS3 3Dアニメーションをマスターする2. ページめくり後のページ内容の...
目次序文コンストラクタ、プロトタイプオブジェクト、インスタンスオブジェクトの関係プロトタイプチェーン...
MySQL レプリケーションには、SQL ステートメント ベースのレプリケーション (SBR)、行ベ...
この実験では、空のデータベース、オフライン、オンラインの 3 つのモードで、1 つのマスターと 2 ...
rm コマンドrm コマンドは、ファイルを削除するときによく使用されるコマンドです。ファイルまたはデ...
1. はじめにこの記事には MySQL インストール部分のスクリーンショットがないので、ある程度の基...
最近MySQLを5.7にアップグレードしましたが、WordPressでデータのインポート時にエラーが...
MongoDB はクロスプラットフォームであり、Windows と Linux の両方にインストール...