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

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

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

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

Q&A

解決済

2回答

649閲覧

JSでUncaught SyntaxError: Invalid left-hand side in for-loopになります。

yuujiMotoki

総合スコア90

JavaScript

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

0グッド

0クリップ

投稿2020/11/03 05:50

編集2020/11/03 06:35

#内容
Flaskでファイル送信FORMを動的に作っています。

#状況
JSでUncaught SyntaxError: Invalid left-hand side in for-loopになります。

#コンセプト
FORMからFLASKには、actionタグに追加したURL/IDで飛ばそうとしています。
JSにはソースの可読性を高めるため、タイトルとURL末尾のエンドを書いた
配列を使い、Flaskでレンダリングしたあと、JSで埋め込みしようとしています。

html

1 2 {% for i in forms %} 3 <h1 id = "t{{loop.index}}"></h1> 4 <p> 5 <form id = "f{{loop.index}}" class="form form-horizontal" 6 method="POST" action="{{url_for('data_import')}}" 7 enctype="multipart/form-data"> 8 <input type="file" name="file"> 9 <input type="submit" > 10 </form> 11 </p> 12 {% endfor %} 13 14 15<script> 16 var dict = 17 { 18 "データ1":"MAP", 19 "データ2":"PAL", 20 "データ3":"NUM", 21 "データ4":"BUN" 22 } 23 24 for(key,index in dict){ 25 document.getElementById('f'+index).action += "/"+dict[key] 26 document.getElementById('t'+index).textContent = dict[index] 27 } 28</script>

#相談
何故ここまで複雑化したのかというと、FLASK側の処理をURLエンドポイントで分岐したいことと、JS側をコード変更が容易になるようにしたいためです。

JSに詳しくなくて、FLASK側で試行錯誤したのですが、VIEWに関わる情報は
JS側で処理をしたいというのが根本にあります。

 ひとまず表題のエラーで先に進めない状態です。

すみませんがJS初心者ですので、ゆるめに見ていただければと思います。

#自己解決

調べまくってようやくゴールにたと蹴りつきました。

javascript

1 2 Object.keys(dict).map(function(key,index){ 3 document.getElementById('t'+index).textContent = key; 4 document.getElementById('f'+index).action += "/"+dict[key]; 5 }); 6

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

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

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

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

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

kei344

2020/11/03 08:32

まだ質問が「受付中」になっていますが、どのように解決したのかを回答文に書き、「解決済」にされてはいかがでしょうか。
guest

回答2

0

やりたいことはできた。とのことなので「エラーの原因」について。

javascript

1for( key,index in dict ) { 2 ~~~~~~~~~ 3 Invalid left-hand side in for-loop

ご質問にある for in ループで扱う場合

javascript

1idx=0; 2for(key in dict){ 3 let val = dict[key]; 4 5 console.log( idx, key, val ); // checkする 6 document.getElementById('f'+idx).action += "/"+val; 7 document.getElementById('t'+idx).textContent = key; 8 idx++; 9}
  1. idx をループの外で宣言しておく(初期値 0
  2. ループごとにidxをインクリメント

計数のための工夫が必要になります

調べまくって

モダンな実装を覚えると、スマートに書けますよね。

投稿2020/11/03 08:44

AkitoshiManabe

総合スコア5434

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

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

yuujiMotoki

2020/11/04 01:20

Pythonのenumrateで出来ることを探していたのですが、 よくよく考えたら、初歩に戻ってループカウンタで回すコードを書けばよかったようです。 モダンはモダンで、もっと別な時に威力を発揮しそうですので また詳しく勉強したいと思います。
guest

0

自己解決

Flask側はJINJA2のレンダリング時にloop.index0を使い、
JS側からはMAPのINDEXから生成したもので、紐付けを行った。

INDEXを取り出す方法としては、MAP関数が有効とのこと。
Pythonで言えば、下記に相当

for インデックス, 要素 in enumerate(対象のリスト):

投稿2020/11/03 08:37

yuujiMotoki

総合スコア90

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問