質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

973閲覧

数字をカウントして溜めていく変数を自動で複数持ちたい

akamotosan

総合スコア12

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2018/09/20 03:29

まずは下記のような簡単な関数があります。
カウントをクリックするたびにnumの数値が増えていきます。

<script> $(function(){ var num=0; function cnt(){ num++; console.log(num) } $(".box .start").on("click", function(){ cnt(); }); }); </script> <div class="box"> <button class="start">カウント</button> </div>

要件を増やして、下記のように1ページに複数のカウンタを用意する時

<div class="box"> <button class="start">カウント</button> </div> <div class="box"> <button class="start">カウント</button> </div>

それぞれのカウント用に自動でnum(カウンター)を用意するにはどのような方法がありますでしょうか?

初歩的な質問で恐縮ですがご教示願います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

こんにちは。

それぞれのカウント用に自動でnum(カウンター)を用意するにはどのような方法がありますでしょうか?

の回答としては、クロージャ(closure)を使うことが思いつきます。
以下、その実装例です。

javascript

1function cnt(name) { 2 var num = 0; 3 return function() { 4 num ++; 5 console.log(`${name} num: ${num}`); 6 } 7} 8 9$("button").each(function(i) { 10 $(this).on("click", cnt(`button#${i}`)); 11}); 12

上記のコードを動作確認できるよう、以下にも上げておきましたので、お試しください。

https://jsfiddle.net/jun68ykt/yn7ma1z3/1/

上下それぞれのボタンをクリックしていくと、以下の画面:

イメージ説明

の Console に表示されているとおり、個別に num がカウントアップされていくことを確認できると思います。

参考になりましたら幸いです。

投稿2018/09/20 03:54

編集2018/09/20 04:44
jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akamotosan

2018/09/20 06:02

丁寧なご回答ありがとうございました!! 挙動が動くところまで用意してくださり感謝です! クロージャの学習がまだまだですが、これから理解できるように学習していきます! また、よろしくお願いいたします。
akamotosan

2018/09/20 06:09

私のレベルが低すぎて本質でない部分で理解できない箇所があり追加質問よろしいでしょうか? 下記の記述はどのような記述方法でしょうか?(業務でのJS使用が少ないものですみません) button#${i} ${name} num: ${num} また、どのように検索すれば出てくる情報でしょうか?
jun68ykt

2018/09/20 06:34

> 下記の記述はどのような記述方法でしょうか? テンプレート文字列 https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/template_strings です。変数や固定の文字列を連結した文字列を作るのに name + " num: " + num という感じで + でつなげるかわりに `${name} num: ${num}` と分かりやすく書けます。 > クロージャの学習がまだまだですが、これから理解できるように学習していきます! なるほどです。 以下、手前味噌になりますが、「クロージャーとは?」を端的に説明した文章を、定評のある JavaScript の書籍から引用した投稿になります。ご参考まで。 クロージャを一言で表すと (読書メモ) https://qiita.com/jun68ykt/items/58ea6085e1304c025836 いよいよ「クロージャとは何か」という質問に答えよう。(読書メモ) https://qiita.com/jun68ykt/items/88069b1c83e496b4ff16 JavaScriptのすべての関数はクロージャを定義します。(読書メモ) https://qiita.com/jun68ykt/items/6ea68c2d44601c241dad
akamotosan

2018/09/20 09:01

ありがとうございます! テンプレート文字列という言葉も初めてみました。 省略した形なのですね! 張っていただいたリンクをすべて確認します!!
guest

0

ベストアンサー

要素のindexを取って配列を使う方法がありますね。
汚いソースですがこんな感じです

$(function(){ var nums=[]; $(".box .start").on("click", function(){ var index = $('.box .start').index(this); if(isNaN(nums[index]))nums[index] = 0; nums[index]++; console.log(nums[index]); }); });

投稿2018/09/20 03:51

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akamotosan

2018/09/20 05:59

迅速なご返答ありがとうございました! 私のレベルではこちらの案の方が分かりやすかったんpでベストアンサーに選ばせていただきます。 またよろしくお願いいたします。
akamotosan

2018/09/20 09:59

補足の質問よろしいでしょうか? if(isNaN(nums[index]))ここの比較演算子で{}を省略することで、配列へのスコープを可能にしているのですか?{}を省略するというのは領域を取り払う役目もあるのでしょうか?見当違いの質問だったらすみません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問