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

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

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

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

jQuery

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

GsACADEMY

セカイを変えるエンジニア【GEEK】を養成する 授業料後払いのエンジニア養成学校です。 ①一流企業によるメンター指導 基本習得後は2ヶ月間メンターの個別指導でサービス完成を目指します。 ②480万円までの起業支援出資 起業志望者をサムライインキュベートが支援(審査あり)します。 ③初心者歓迎・授業料後払い 丸暗記ではなく、創りながら。初心者のための授業料後払い制度です。

Q&A

解決済

2回答

3539閲覧

clickイベントをwhile文で設定する方法について

Makitani

総合スコア19

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

jQuery

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

GsACADEMY

セカイを変えるエンジニア【GEEK】を養成する 授業料後払いのエンジニア養成学校です。 ①一流企業によるメンター指導 基本習得後は2ヶ月間メンターの個別指導でサービス完成を目指します。 ②480万円までの起業支援出資 起業志望者をサムライインキュベートが支援(審査あり)します。 ③初心者歓迎・授業料後払い 丸暗記ではなく、創りながら。初心者のための授業料後払い制度です。

0グッド

0クリップ

投稿2015/05/12 14:54

IDが1~9の画像に対して、それぞれclickイベントを設定する(1の画像をクリックした時には、1の画像が表示される)ために、if文では長くなるため、while文でインクリメントしてそれぞれの画像に設定したいと考えました。
しかし、clickイベントはすべての画像に設定できましたが、最大の数値の画像(9のもののみ)しか表示されません。

ソースは下記のとおりです。

lang

1<script> 2$(document).ready(function(){ 3 4var imgs = ["l1.png" , "l2.png" , "l3.png","l4.png" , "l5.png" , "l6.png","l7.png" , "l8.png" , "l9.png"]; 5 6 var n = 0; 7 while(n < 9){ 8 n++; 9 console.log(n); 10 $("#"+n).html('<img src="img/'+imgs[n-1]+'" width=80%>'); 11 $("#"+n).on("click",function(){ 12 $("#img_view").html('<img src="img/'+imgs[n-1]+'">'); 13 }); 14 15 } 16 17 18}); 19</script> 20

function内にwhile文を記載し、インクリメントを設定してもみましたが、今度はタイムアウトが発生するようになり断念しました。
clickイベントはwhile文で変数を代入するごとに、それぞれの画像に設定することはできないのでしょうか。

ご確認よろしくお願いします。

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

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

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

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

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

guest

回答2

0

こんにちは。

現在のコードから最小限の修正で済ますには、元のコードのwhileの中で、
on でclickハンドラを設定している、

lang

1 $("#"+n).on("click",function(){ 2 $("#img_view").html('<img src="img/'+imgs[n-1]+'">'); 3 });

の中で、imgs[n-1] の n を $(this).attr("id") に変えて

lang

1 $("#"+n).on("click",function(){ 2 $("#img_view").html('<img src="img/'+imgs[$(this).attr("id")-1]+'">'); 3 });

とすれば、意図しているとおりに、クリックした画像が、#img_view に
表示されるのではないかと思われます。

ご参考になれば幸いです。

投稿2015/05/12 15:59

編集2015/05/12 16:02
jun68ykt

総合スコア9058

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

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

Makitani

2015/05/12 16:13

ご回答ありがとうございました。 稼動しました。 このような場所にもjqueryを放り込むことができるとは思いもしませんでした。 今後も活用させていただきます。
guest

0

ベストアンサー

こんばんは、
ちょっとhtml側がないのでどういう構造になっているか把握しかねるところですが、
想定して回答となりますので、ご留意ください。

繰り返し構文でonメソッドを実装されたようですが、
こちらクリックを行った後にコールバック関数(以下太字部分)が実行されます。
なので、繰り返しでonメソッドでクリックイベントを追加しても、
コールバック関数内の変数(ここでいうところの変数n)は渡せないことになります。

$("#"+n).on("click",function(){...});

ただ、こうした書き方にすればできるのではと思います。

[html]

<body> <header> <h1>jQuery</h1> </header> <main> <ul> <li id="btn1">クリック</li> <li id="btn2">ダブルクリック</li> <li id="btn3">マウスオーバー</li> </ul> <div id="img_view">ここにImageを表示</div> <div id="tmp"></div> ←ここに配列imgsに格納された画像を出力 <div id="str_view"><p>テスト</p>ここに文字を表示</div> </main> <footer></footer>

[js]
var imgs = ["l1.png" , "l2.png" , "l3.png","l4.png" , "l5.png" , "l6.png","l7.png" , "l8.png" , "l9.png"];

var n = 0; while(n < 9){ n++; console.log(n); **$("#tmp").append('<img id="img'+ (n-1) +'" src="img/'+imgs[n-1]+'" width=80%>');** __↑ここでid="tmp"の要素に画像を出力、出力した画像のidには"img0","img1"...を指定__ $("#img"+(n-1)).on("click",function(){ __↑出力した画像をクリックした際のイベント__ **var index = $("#tmp img").index(this);** $("#img_view").html('<img src="img/'+imgs[**index**]+'">'); }); }

});

ポイントとしては、
jqueryのindexメソッドを使って何番目の要素をクリックしたか、
変数indexに格納しています。
以下参考URLになります。
http://qiita.com/otoyo/items/04e12fe478b7f76ce545

もう少し楽orスマートなやり方が色々あると思うので、
是非チャレンジしてみてください。

投稿2015/05/12 15:30

編集2015/05/12 15:32
keiyag

総合スコア20

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

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

Makitani

2015/05/12 16:11

ご回答ありがとうございます。 index属性は色々なシーンで活用できそうです。 参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問