jQueryでボタンのクリックを押して1回目、2回目、3回目のクリックの動作を登録するコードを教えて欲しいです。4回目以降は反応しないようにしたいです。どうかお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
shinji709 さんのHTMLで、以下のような方法も。
配列の破壊的メソッドを活用し、メモリに配慮するタイプ。
- イベントリスナはコールバック関数なので、配列に格納しておきます。
- shift() で取り出して順番に実行します。
- 残りのコールバック関数がなくなると、配列への再格納が必要になります。
javascript
1let cbLauncher = [ 2 function ( ev ) { 3 $("#fuga").text("1回目"); 4 }, 5 function ( ev ) { 6 $("#fuga").text("2回目"); 7 }, 8 function ( ev ) { 9 $("#fuga").text("3回目"); 10 } 11]; 12 13$('#hoge').on("click", cbLauncher.launch=function( evt ) { 14 15 // 異なる処理を順番に実行 16 let cb = cbLauncher.shift(); 17 if ( cb && "function" === typeof cb) cb( evt ); 18 19 // クリーンナップ 20 if ( !cbLauncher.length ) { 21 $('#hoge').off("click", cbLauncher.launch); 22 cbLauncher = null; // ガベージコレクタが回収してくれるかも(追記 23 //$("#fuga").text("unhandled click"); 24 } 25 26}); 27
ただし、4回目以降は無効化したいとのことなので、完全な クリーンナップ を考慮して、自らイベントリスナを解除します。
($().on("click", listener)
で登録 / $().off("click", listener)
で解除)
投稿2020/11/09 21:50
編集2020/11/09 21:57総合スコア5434
0
ベストアンサー
11/10 06:09現在、質問文にコードが皆無なので以下HTMLを想定します。
HTML
1<button id="hoge">ボタン</button> 2<p id="fuga"></p>
以下のようにクロージャ使って書けば良いと思います。
JavaScript
1$('#hoge').click((function() { 2 let count = 0 3 return function() { 4 count++ 5 if (count < 4) $('#fuga').text(count + '回目') 6 } 7})())
1回目、2回目、3回目で処理を分けるには、上記コードのif (count < 4) $('#fuga').text(count + '回目')
の部分を以下に差し替えて、それぞれの処理を書いて下さい。
JavaScript
1 if (count === 1) { 2 // 一回目の処理を書く 3 } else if (count === 2) { 4 // 二回目の処理を書く 5 } else if (count === 3) { 6 // 三回目の処理を書く 7 } else { 8 // 四回目以降 (何も書かない) 9 }
投稿2020/11/09 21:09
総合スコア805
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。