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

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

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

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

702閲覧

for文で期待する値が取得できない

t8pda

総合スコア9

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2021/04/03 03:33

jqueryを用いて、selectメニューの値が選ばれていたらテキストファイルを読み込む、という処理を行いたいと考えています。

html

1<select id="id1"> 2 <option></option> 3 <option>filename1</option> 4</select> 5<select id="id2"> 6 <option></option> 7 <option>filename2</option> 8</select> 9<select id="id3"> 10 <option></option> 11 <option>filename3</option> 12</select>

jquery

1for (var i = 1; i <= 3; i++) { 2 var Id = '#id' + i; 3 var IdValue = $(Id).val(); 4 5 if(IdValue){ 6 var loadFile = $.get("root/" + IdValue + ".txt"); 7 loadFile.done(function(data){ 8 console.log(data); 9 console.log(i); 10 }); 11 }; 12}

上記の記述で、<select id="id1">にてfilename1を選択すると
filename1.txtは読み込まれ、console.log(data)にその内容が正しく表示されます。

しかし、ここでconsole.log(i)で期待している値は「1」なのですが
実際には「4」が表示されてしまいます。

どうしてこういった結果となってしまっているのか解らず、質問させて頂きました。
ご教示いただければ幸いです。よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

非同期処理のためfunction(data){...}が処理されるのはループを抜けた後だから、というのが回答になりますが、詳細に説明すると大変なので、この辺りをお読みください。

非同期処理:コールバック/Promise/Async Function · JavaScript Primer #jsprimer


解決方法ですが、for (let i = 1;としてブロックスコープを持たせるといいかもしれません。

ブロックスコープ | 関数とスコープ · JavaScript Primer #jsprimer

投稿2021/04/03 03:49

編集2021/04/03 03:53
Lhankor_Mhy

総合スコア36960

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

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

t8pda

2021/04/03 04:26

非同期処理完了時は既にループを抜けてしまっていたのですね 原因を教えて頂けて大変スッキリしました! varをletとする事で期待する値を取得することもできました。 具体的な解決方法までご提示頂きありがとうございます! 非同期処理の理解が全く追いついていない事を改めて認識しましたので、 参考に貼っていただいたURLでしっかり勉強して参ります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問