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

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

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

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

JavaScript

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

Q&A

解決済

1回答

997閲覧

配列の値を取得、for、if、attrを使ってimgを出力をしたい

kuririn35

総合スコア17

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

JavaScript

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

0グッド

0クリップ

投稿2020/03/29 10:51

前提・実現したいこと

JavaScriptの配列を使った課題をしています。

①"1.png""2.png"...といったファイル名を番号順にした画像を用意
②配列の長さを指定して、それぞれに数字を代入する。
③代入された数字を使って、"[配列要素].png"という形で画像を作成する。
④ボタンを押すごとに画像が変わっていく。

という流れを作りたいです。

発生している問題・エラーメッセージ

array, for, attrを使っていますが、
それぞれの理解が不十分なため、どう組み立てていけばいいのか悩んでいます。

画像は"1.png""2.png""3.png""4.png""5.png""6.png"の6個を用意しています。

下記のコードでは、ボタンを押すと"6.png"の画像が表示され、途中の"2.png"~"5.png"が表示されません。
配列に一個ずつ要素を格納すれば組み立てることが出来たのですが、数が増えた場合にカウンターを使って処理をしたいです。

javascript

1var pic = new Array( 2 "1.png", 3 "2.png", 4 "3.png", 5 "4.png", 6 "5.png", 7 "6.png" 8); 9var no = 0; 10var le = pic.length; 11 12function f(){ 13 if(no < le-1){ 14 no++; 15 $("#a").attr("src",pic[no]); 16 }else{ 17 alert("これ以上すすめません。"); 18 } 19}

該当のソースコード

下記がうまく処理出来ていないコードです。

javascript

1var arr = new Array(6); //格納する場所を用意 2var no = 1;        //変数を代入 3 4function f(){ 5 for(var i = 0; i < arr.length; i++){ //配列の長さまで処理を繰り返す 6 arr[i] = no;               //変数の値を格納 7 no++;                   //変数の値を増やしていく 8 $("#a").attr("src",arr[i] + ".png"); //id=aの属性を変更 9  } 10}

html

1<div> 2 <img id="a" src="1.png" alt="" /> 3</div> 4<form method="post"> 5 <input type="button" value="→すすむ" id="forward" onclick="f()"> 6</form>

試したこと

配列に宣言する方法を試す。
alertやdocument.writeを使って、配列要素が一個ずつ取得できることを確認する。
if文も考えましたが、どこでどう分岐させたら良いのか分からずです。

補足情報(FW/ツールのバージョンなど)

勉強中のため、意図もしっかり伝えることが出来ていないかもしれませんが
何卒宜しくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

今回動作しない原因は
初期処理と毎回実行すべき処理の区別が明確でないことです。

f関数はボタンを押す度にピコピコ実行されるのに、
毎回arr配列を作成し直す必要がありますか?

これを混在してしまうと、
やるべきことに注力出来ずどっち付かずの散漫な結果に終わるのです。
やりたいことは常に1個にしぼりましょう。

回答をさっと書いてしまうとこうなります。

js

1var arr = new Array(6); 2for (var i = 0; i < arr.length; i++) { 3 arr[i] = (i + 1) + ".png"; 4} 5var no = 0; 6 7function f(){ 8 if(no < arr.length - 1){ 9 no++; 10 $("#a").attr("src",pic[no]); 11 }else{ 12 alert("これ以上すすめません。"); 13 } 14}

配列に宣言する方法を試す。

alertやdocument.writeを使って、配列要素が一個ずつ取得できることを確認する。
if文も考えましたが、どこでどう分岐させたら良いのか分からずです。

console.logを覚えましょう。

ChromeやFirefox等のブラウザはF12キー(Macはcommand + option + i)でデベロッパーツールが起動します。
これを起動させ、Consoleタブをクリックします。

JavaScriptのコード内の好きな箇所でconsole.log(123)などと打ち込むと
このコンソール上に123という結果が表示されます。

js

1var arr = new Array(6); //格納する場所を用意 2var no = 1;        //変数を代入 3 4function f(){ 5 console.log("f関数実行!"); 6 for(var i = 0; i < arr.length; i++){ 7 console.log("i:", i); // 複数の引数に対応 8 arr[i] = no; 9 console.log("arr[i]:", arr[i]); 10 no++; 11 console.log("no:", no); 12 $("#a").attr("src",arr[i] + ".png"); 13 console.log("src:", arr[i] + ".png"); 14 } 15 console.log("f関数完了!"); 16}

こうすれば今の処理を一切止める事なく、
変数の遷移が時系列で追えますね?
一度試してみてください。

投稿2020/03/30 01:37

miyabi-sun

総合スコア21158

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

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

kuririn35

2020/03/30 03:36

ありがとうございます!!!出来ました!! 仰るとおり、初期処理と毎回実行すべき処理の区別が明確でなかったです。 今回の解答で考え方を学ばせて頂きました! console.logでの確認方法も今後活用させて頂きます!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問