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

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

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

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

Q&A

解決済

3回答

778閲覧

JavaScript 変数名 動的に付けたい

kokok

総合スコア145

JavaScript

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

0グッド

0クリップ

投稿2020/04/10 18:58

編集2020/04/11 06:26

js

1 2<script> 3{ 4 5 6for (var i = 41; i < 43; i++) { 7 8eval("var btn" + i + "=" + document.getElementById('btn' + i) + ";"); 9eval("var answer" + i + "=" + document.getElementById('answer' + i) + ";"); 10eval("var delete_answer" + i + "=" + document.getElementById('delete' + i) + ";"); 11 12btn.addEventListener('click',()=>{ 13 14 15answer_toggle(btn, answer); 16 17}); 18 19delete_answer.addEventListener('click',()=>{ 20 21answer_toggle(btn,answer); 22 23}); 24} 25 26 27 28function answer_toggle(btn,answer) { 29 30 31if(btn.classList.contains('hidden') === true){ 32 33 btn.classList.remove('hidden'); 34 answer.classList.add('hidden'); 35 36 }else{ 37 38 btn.classList.add('hidden'); 39 answer.classList.remove('hidden'); 40 41} 42} 43

変数名を動的に付けたいのですが、うまくいきません。
調べたところ、eval()で出来そうだったのですが、
Uncaught SyntaxError: Unexpected identifier
とエラーになってしまいます。
また、eval()はあまり使わないほうが良いとも調べたら書いてありました。

動的に変数名を変える方法がなかなか分からなかったのでアドバイスいただけると助かります。

--追記----

やりたいことは、hmtlボタンに対して(複数のボタン)に対してイベントを仕込みたいと思っております。

動的な変数名ではなくて配列にしてみました。

js

1array_btn[i].addEventListener('click',()=>{ 2 3 4//undefinedになってしまう 5console.log(array_btn[i]); 6answer_toggle(array_btn[i], array_answer[i]); 7 8}); 9

しかし、上記のところで,array_btn[i]がundefinedになってしまいます。

これは、clickした時に、イベントが走るから、array_btn[i]は未定義になるのでしょうか?

js

1 2 3 4 5 6{ 7 8var array_btn = []; 9var array_answer = []; 10var array_delete_answer = []; 11 12for (var i = 41; i < 43; i++) { 13 14 15array_btn.push( document.getElementById('btn' + i)); 16array_answer.push( document.getElementById('answer' + i)); 17array_delete_answer.push( document.getElementById('delete' + i)); 18 19 20} 21 22 23for (var i = 0; i < array_btn.length; i++) { 24 25 26array_btn[i].addEventListener('click',()=>{ 27 28 29//undefinedになってしまう 30console.log(array_btn[i]); 31answer_toggle(array_btn[i], array_answer[i]); 32 33}); 34 35array_delete_answer[i].addEventListener('click',()=>{ 36 37answer_toggle(array_btn[i],array_answer[i]); 38 39}); 40 41} 42 43 44//受け取った領域の表示・非表示を変える 45function answer_toggle(btn,answer) { 46 47 48if(btn.classList.contains('hidden') === true){ 49 50 btn.classList.remove('hidden'); 51 answer.classList.add('hidden'); 52 53 }else{ 54 55 btn.classList.add('hidden'); 56 answer.classList.remove('hidden'); 57} 58} 59 60} 61

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

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

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

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

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

hoshi-takanori

2020/04/10 18:59

配列というものを使うと良いでしょう。
m.ts10806

2020/04/10 21:15

過去質問に頻出かと思います
kokok

2020/04/11 04:45

すみません、理解が足りていなくて。 過去の質問を見ながら自分で考えてみます。 hoshi-takanoriさん >>ありがとうございます。 参考にしてみます。
coco_bauer

2020/04/11 05:54

動的に変数名を変えて、何がしたいのですか? どんな事をするために、変数名を変える必要があるのでしょう。
guest

回答3

0

過去質問を見ていただけるとわかりますが、
なぜか初心者の方は変数名を動的にどーこーしたがるようです。
が、これは間違ってます。 そういう考え方は捨てるほうがよろしいかと。

投稿2020/04/10 23:23

y_waiwai

総合スコア87774

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

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

kokok

2020/04/11 04:48

回答ありがとうございます。 まだ、実現したいことがあっても、なかなか こうやった方がいい みたいなのが思いつきませんでした。 過去質問を見ながら、考えてみます。
y_waiwai

2020/04/11 05:32

何をどうするのか、を詳しく書いてくれれば回答が来ると思いますが
guest

0

ベストアンサー

インタプリタ言語には大抵存在する 配列連想配列で扱ってください。
ご質問の(eval()の引数から推察した)内容からは 連想配列が良いと思います。

Google検索 javascript 連想配列 オブジェクト

投稿2020/04/11 13:02

AkitoshiManabe

総合スコア5432

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

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

0

追記分について。var ilet i

投稿2020/04/12 14:03

kei344

総合スコア69407

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問