jQueryイベントの繰り返しとボタンのクリックで画像表示する方法

このQ&Aのポイント
  • jQueryを使用してボタンと画像の関連付けを行いたい場合、以下のようなコードを使用します。
  • forループを使用してボタンの番号と画像の番号を対応させ、クリックしたボタンに応じた画像を表示します。
  • ただし、現在のコードでは最後のiが10のときのイベントしか反映されないため、変数iをクロージャー内で使用する方法を採用することで解決できます。
回答を見る
  • ベストアンサー

jQuery イベントの繰り返し

jQuery イベントの繰り返し ボタンが.button1から.button10まであり、それぞれを押すと .imgareaに1.ipgから10.jpgまでを表示させたいと思っています。 jQueryで下記のように書いたのですが、 最後のiが10のときのイベントしか反映されません…。 うまく記述するにはどうすればよいでしょうか? よろしくお願いいたします。 for(i=1; i<=10; i++){ $(".button"+i.toString()).click(function(){ $(".imgarea").attr("src",i.toString()+".jpg"); }) }

質問者が選んだベストアンサー

  • ベストアンサー
  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

まず $(".何々")というのはclassのセレクター指定ですが、 それは大丈夫ですか、こおいった場合class属性じゃなくid 属性使うのが自然だと思うんですが...だいじょうぶですよねえ それはさておき、イベントハンドラーにiが渡ってませんよ! (i.toString()のtoString()はこのさい省略しても大丈夫です。 勝手に文字連結されます。) $(function(){ for(i=1; i<=10; i++){ $("#button"+i).bind("click",{x:i},function(e){ $("#imgarea").attr("src",e.data.x+".jpg"); $("#imgarea").attr("alt",e.data.x+".jpg"); }); } }); <div> <button id="button1">1</button> ---------------------- <button id="button10">10</button> <img id="imgarea" src="hoge" alt="hoge"> </div> ですね

shiraito
質問者

お礼

classとidに関しては、表示されるからいっか! みたいに思っちゃってる部分はありますね…。 きちんとします。すみません。 上記のやり方で出来ました。 助かりました。ありがとうございます。。

関連するQ&A

  • jQuery 変数の代入

    jQuery 変数の代入 jQueryを使って.nextを押すごとに#areaに表示する画像を img1.jpg、img2.jpg、img3.jpg、、、、 と切り替えたいと思っているのですが、 下記のように書いても変数が入ってくれません…。 どのように記述すればよいでしょうか? よろしくお願いします。 $(function(){ var i=1; $(".next").click(function(){ i++; $("#area").attr("src","img",i,".jpg"); }) })

  • jQueryでセレクタに複数のIDを指定する方法

    助けてください。 今jQueryでボタンを押すと画像を切り替えるものを作成しています。 画像を表示しているところは <div id="contents"> <div id="contentsleft"> <img src="./imgs/aaa1.jpg" alt="ホーム"> </div> </div> となっていて、ボタンを押す処理のところに jQuery(document).ready( function() { $("button#btn01").click(function(){ $("img#contentsleft").attr("src", "./imgs/aaa2.jpg"); }); としていますが画像が切り替わりません。 $("img#contentsleft")のところのセレクタが間違っているのでしょうか? 指定方法のご教授をお願いいたします。

  • 【jQuery】for文ではイベント登録できない?

    複数のボタンがあり、それぞれがクリックされると、 対応したdiv要素がanimateを行う、というギミックを作成しております。 配列に複数のボタンのid名と、各div要素のid名を格納しておき、 for文でclickイベントを登録しようとしましたが、うまく動作しませんでした。 【例1】 jQuery(function($){  var buttonArray = ["#button0", "#button1", "#button2"];  var divArray = ["#box0", "#box1", "#box2"];  for(i=0; i<buttonArray.length; i++){   $(buttonArray[i]).click(function(){    $(divArray[i]).animate({width: "0px"}, "slow", "swing");   });  } }); --------------------------------------------------- 以下のように書くと、正常に動作しました。 【例2】 jQuery(function($){  var buttonArray = ["#button0", "#button1", "#button2"];  var divArray = ["#box0", "#box1", "#box2"];  $(buttonArray[0]).click(function(){   $(divArray[0]).animate({width: "0px"}, "slow", "swing");  });  $(buttonArray[1]).click(function(){   $(divArray[1]).animate({width: "0px"}, "slow", "swing");  });  $(buttonArray[2]).click(function(){   $(divArray[2]).animate({width: "0px"}, "slow", "swing");  }); }); --------------------------------------------------- そこで質問なのですが、 ・for文ではイベントの登録は行えないのか? ・今回のようなケースの場合、どのように書くのが適切か? 上記2点に関して、ご回答、ご意見を頂けますと幸いです。 どうぞよろしくお願い申し上げます。

  • jqueryについて

    jqueryについて こんな内容のjqueryをひとつにまとめて、なおかつ01~99(実績数)までのidを割り振る設定したいのですが可能でしょうか? 例えば $(function(){ $("#navi01-99 a").click(function(){ $("#main01-99 img").attr("src",$(this).attr("href")); return false; }); みたいな感じであとはidに番号を付ければいいみたいな・・・出来ませんでしょうか? 用途は仕事の制作実績で使用したいのですが、どなたか教えていただけますでしょうか? $(function(){ $("#navi01 a").click(function(){ $("#main01 img").attr("src",$(this).attr("href")); return false; }); }); $(function(){ $("#navi02 a").click(function(){ $("#main02 img").attr("src",$(this).attr("href")); return false; }); }); $(function(){ $("#navi03 a").click(function(){ $("#main03 img").attr("src",$(this).attr("href")); return false; }); }); $(function(){ $("#navi04 a").click(function(){ $("#main04 img").attr("src",$(this).attr("href")); return false; }); }); $(function(){ $("#navi05 a").click(function(){ $("#main05 img").attr("src",$(this).attr("href")); return false; }); });

    • ベストアンサー
    • AJAX
  • jQueryでのerrorイベントについて

    imgタグのsrc属性に記述された画像ファイルが存在しない場合に、代替えの画像を表示するスクリプトをjQueryで実現したく、下記をつくりました。 <html> <head> <meta charset="utf-8"> <script type="text/javascript" src="jquery-1.8.2.min.js"></script> <script type="text/javascript"> $(function() { $("img.nophoto").error(function(){ $(this).attr("src", "no_photo.jpg"); }); }); </script> </head> <body> <img src="a1.jpg" width="100" alt="a1" class="nophoto" /> <img src="a2.jpg" width="100" alt="a2" class="nophoto" /> <img src="a3.jpg" width="100" alt="a3" class="nophoto" /> : : <img src="a19.jpg" width="100" alt="a19" class="nophoto" /> <img src="a20.jpg" width="100" alt="a20" class="nophoto" /> </body> </html> a1.jpg~a20.jpgが全ての画像ファイルが存在しない場合に、全てno_photo.jpgに置き換わって欲しいのですが、ページをリロードする度に状態が変わります。(所々、no_photo.jpgに置き換わったり、全て置き換わったり、全て置き換わらなかったり) なぜこの様な現象が発生するのか悩んでおります。 何かアドバイスお願いします。 確認ブラウザ:FF18,Crome24

  • jQuery mobileのイベントについて

    jQuery mobile 1.0で使えていたイベントが1.1.1で使えなくなりました。 何か仕様が変わったのでしょうか? よろしくお願いします。 例: $("div:jqmData(role='collapsible')").each(function(){  // ここが機能しなくなった bindEventTouch($(this)); }); function bindEventTouch(element) { element.bind('tap', function(event, ui) { if(element.hasClass('ui-collapsible-collapsed')) { } else { $('#' + element.attr('id') + 'l li').remove(); $('#' + element.attr('id') + 'l').append("<li>I'm Header #FF</li>"); } }); }

  • jqueryの質問。

    毎回、お世話になります。 jqueryを使ってリンク文字をクリックすると画像が変更できるようにしたいのですが、 上手くいきません。 <HTML> <body> <ul> <li><a href="DSC_0014.jpg">a</a></li> <li><a href="kamen.jpg">b</a></li> <li><a href="irumi.jpg">c</a></li> </ul> <p><img src="DSC_0014.jpg" width="1000" height="671"> <SCRIPT> $(function(){ ("a:eq(0)").click(function(){ $("img").attr("src","DSC_0014.jpg").attr("alt","人物"); return false }); $("a:eq(1)").click(function(){ $("img").attr("src","kamen.jpg").attr("alt","仮面"); return false }); $("a:eq(2)").click(function(){ $("img").attr("src","irumi.jpg").attr("alt","イルミ"); return false }); }); このコードだとリストa,b,cをクリックすると別ページに画像が表示されます。 その場での画像切り替えをしたいのですが、どこが間違っているのでしょうか? 宜しくお願い致します。

  • jQueryでの記述をjavascriptに

    下記のjQueryの記述をライブラリ無しのjavascriptでの記述にしていただきたいです。 imgタグのsrc属性とaタグのhref属性を相対パスから絶対パスに動的に変換させる必要があるのですが、ある事情でjQueryを使えないとの事で困っています。 どうかよろしくお願い致します。 <script type="text/javascript"> $(function(){ $('#hoge').children('img:not([src^=http])').each(function (){ var imgSrc = $(this).attr('src'); $(this).attr('src','http://xxxxxxxxxxxx' + imgSrc); }); $('#hoge').children('a[href^=○○○]').each(function (){ var aHref = $(this).attr('href'); $(this).attr('href','http://xxxxxxxxxxxx' + aHref); }); }); </script>

  • jQueryでshow/hideが上手く行かない

    入力フィールドとボタンを作成し、ボタンを押すたびに入力フィールドが表示・非表示を繰り返すようにしたいと思っています。 入力フィールドが表示されているときにはボタンは"hide"、非表示の時は"show"が表示されている仕様です。 <div id="input"><input type="text" name="something"></div> <input type="button" id="button" value="hide"> 以下のようにjQueryを組んでみました。 $(document).ready(function(){ if($("#button").attr("value") == "hide"){ $("#button").click(function(){ alert("VALUE=" + $("#button").attr("value")), $("#input").children().hide(), $("#button").attr("value", "show"); }); } else if($("#button").attr("value") == "show"){ $("#button").click(function(){ alert("VALUE=" + $("#button").attr("value")), $("#input").children().show(), $("#button").attr("value", "hide"); }); } }); まず、hideボタンを押すとhideのアラートが出てフィールドが非表示になり、showというボタンのみが残ります。 次にshowボタンを押すと、showのアラートは表示されますが、フィールドが再表示されず、ボタンもshowのままです。 elseのalertまで行っているのにその後が機能しないのは何故でしょうか?

  • jQuery class要素を盛り込むには

    画像をマウスオーバーで変化させるコードを、こちらで教えていただいたアドバイスに従って以下の内容で行っています。 $(function(){ $('span img').hover(function(){ $(this).attr('src', $(this).attr('src').replace('.jpg', 'x.jpg')); }, function(){ if (!$(this).hasClass('currentPage')) { $(this).attr('src', $(this).attr('src').replace('x.jpg', '.jpg')); } }); }); BODY部分は、 <SPAN><IMG src="画像.jpg"></SPAN> となっています。 けれど、よくよく考えると、マウスオーバーしたくない画像でも<SPAN>の中に記述していたらコードの影響をうけて、存在しない(マウスオーバー後の)画像を読み込もうとしてしまいます。 基本的な質問で申し訳ないのですが、 区別するため、例えば、マウスオーバーさせたい<SPAN>にはclass要素を入れて、 <SPAN class="change"><IMG src="画像.jpg"></SPAN> としたとして、上記のコードの、 $('span img').hover(function(){ の辺りをどうにか変えればいいように思うのですがよくわかりません。 基本的すぎて申し訳ありませんが、よろしくお願いします。

専門家に質問してみよう