同一ページ内の複数のタグに同一のJQueryを実行

このQ&Aのポイント
  • 同一ページ内に複数のタグに同じJQueryを実行する方法について教えてください。
  • 現在、同じJQuery処理を複数のタグに適用した場合、ページ遷移で正常に動作しない問題が発生しています。
  • 特定のタグが正しく動作するためには、JQueryの実行タイミングを制御する必要があります。
回答を見る
  • ベストアンサー

同一ページ内の複数のタグに同一のJQueryを実行

JQuery初心者です 同一ページ内にサムネイル付ギャラリーを複数作り、 ギャラリーごとに横にスクロールする形で作っています。 今の状態ですと、1ページ目は正常動作で問題はありません。 ただ、1ページ目のJQuery処理前に<a href="#pege2">ページ2へ</a>で2ページ目にスクロールすると、2ページ目のメイン画像抜けてしまいます。 恐らく、前ページでのJQueryの処理が終了してないからだと思います。しばらくすると 前ページの処理が終了し2ページ目のメイン画像に反映されます。 これをどうにか<section id="pege●">ごと、もしくは<a href="#pege●">ページ●へ</a>をクリックしたらJQueryが実行する事が出来ないでしょうか? 色々調べてみましたが、出来ませんでした。 ご享受の程、宜しくお願いいたします。 参照ページ(http://www.tam-tam.co.jp/tipsnote/javascript/post68.html) html(こんな感じで作ってます) <article> <section id="pege1"> <section id="view"><!-- メイン画像--> <p><img src="images/big_a01.jpg" width="" height="" alt="" /></p> <p><img src="images/big_a02.jpg" width="" height="" alt="" /></p> </section> <ul id="thumbBtn"><!-- サムネイル画像--> <li><img src="s_a01.jpg" width="" height="" alt="" /></li> <li><img src="s_a02.jpg" width="" height="" alt="" /></li> </ul> <div id="details"><!-- 説明--> <h2>説明文</h2> <p><a href="#pege2">ページ2へ</a></p> </div> </section></section> <section id="pege2"> <section id="view"><!-- メイン画像--> <p><img src="images/big_b01.jpg" width="" height="" alt="" /></p> ・以下同じ <p><a href="#pege3">ページ3へ</a></p> </section></section> <section id="pege3"> ・以下同じ </section></section> </section> </article> JQueryの記述は次の通りです。 <script type="text/javascript"> $(function (){ //設定 var active="active",interval=5000; var index=0, timerId=null; var tabs=$("#thumbBtn > li"), content=$("#view > p"), cap=$("#caption > li"); tabs.each(function(){$(this).removeClass(active);}); content.hide(); cap.hide(); tabs.eq(0).addClass(active); content.eq(0).fadeIn(0); cap.eq(0).fadeIn(0); //クリックされたらactiveというクラスを付与、 //切り替え、タイマーをリセット tabs.click(function(){ if($(this).hasClass("active")) return; if(timerId) clearInterval(timerId),timerId=null; change(tabs.index(this)); setTimer(); return false; }); //タイマー setTimer(); function setTimer(){ timerId=setTimeout(timeProcess,interval); return false; } function timeProcess(){ change((index+1)%tabs.length); timerId=setTimeout(arguments.callee,interval); } //切り替え function change(t_index){ tabs.eq(index).removeClass(active); tabs.eq(t_index).addClass(active); //fadeout setTimeout(function(){ content.eq(index).stop(true, true).fadeOut(0), cap.eq(index).stop(true, true).hide() ;}, 0); //fadein setTimeout(function(){ index=t_index; content.eq(index).fadeIn(0), cap.eq(index).fadeIn(0) ;}, 0) } }); </script>

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

  • ベストアンサー
  • warpspace
  • ベストアンサー率56% (83/147)
回答No.2

>id名をそれぞれ変えて設定してみます。 id指定でなく、class指定にすればよいのではないですか?。 class指定であれば、同一ページ内の複数箇所で指定可能です。

yamababa
質問者

お礼

何回もお返事頂いてありがとうございます。 clssにする事は既に試してみましたが、駄目でした。 先程、IDをそれぞれ設定し、同じjQueryのjsを複数用意してそれぞれに記述してみたところ、 それぞれ正常に動きました。 とりえず望み通りの動作になりましが、 もっとスマートなやり方があればご指摘頂きたいと思います。

その他の回答 (1)

  • warpspace
  • ベストアンサー率56% (83/147)
回答No.1

>2ページ目のメイン画像抜けてしまいます。 具体的にどのような現象ですか?。 同一ページ内ではidはユニーク出なければなりません。   id="thumbBtn" が複数箇所に存在していませんか?。

yamababa
質問者

お礼

>2ページ目のメイン画像抜けてしまいます。 >具体的にどのような現象ですか?。 状態としては真っ白な状態です。 ご指摘ありがとうございます。 たしかに同じidを複数設定してました。 同じレイアウトなので、問題がないと思っていました。 もう一度、id名をそれぞれ変えて設定してみます。

関連するQ&A

  • サムネイルで画像を切り替えるjQuery

    下記サイトを参考にサムネイルで画像を切り替えるjQueryを作成しました。 http://tam-tam.co.jp/tipsnote/javascript/post3351.html 自動で切り替えしないようにスクリプトを一部修正して下記を設置しています。 chromeなどでは問題なくスムーズに切り替わるのですが、 firefoxでは、メイン画像とサムネイルが切り替わる際に (フェードイン・フェードアウトの時) 背景が黒くなってしまいます。 また少し動作が不安定に感じます。 背景は白のままで、出来れば動作も改善させたいのですが、 原因が分からず困っています。 どなたか参考サイトのサンプルで原因が分かる方がおられましたら ご教授いただけないでしょうか。 どうぞ宜しくお願い致します。 $(function (){ //設定 var active="active",interval=6000; var index=0, timerId=null; var tabs=$("#thumbBtn > li"), content=$("#view > p"), cap=$("#caption > li"); //クラスの付与 tabs.each(function(){$(this).removeClass(active);}); content.hide(); cap.hide(); tabs.eq(0).addClass(active); content.eq(0).fadeIn("fast"); cap.eq(0).fadeIn("fast"); //クリックされたらactiveというクラスを付与、 //切り替え、タイマーをリセット tabs.click(function(){ if($(this).hasClass("active")) return; if(timerId) clearInterval(timerId),timerId=null; change(tabs.index(this)); setTimer(); return false; }); //タイマー // setTimer(); // function setTimer(){ // timerId=setTimeout(timeProcess,interval); // return false; // } function timeProcess(){ change((index+1)%tabs.length); timerId=setTimeout(arguments.callee,interval); } //切り替え function change(t_index){ tabs.eq(index).removeClass(active); tabs.eq(t_index).addClass(active); //fadeout setTimeout(function(){ content.eq(index).stop(true, true).fadeOut(3000), cap.eq(index).stop(true, true).hide() ;}, 300); //fadein setTimeout(function(){ index=t_index; content.eq(index).fadeIn(3000), cap.eq(index).fadeIn(3000) ;}, 400) } });

  • jQueryタブメニュー内、パネル間のリンク方法。

    javascript勉強中です。 立て続けに質問してしまい、ご迷惑おかけしておりますが協力していただければ幸いです。 下記のjQueryタブメニューですが、パネル内から他のパネルへのリンクを実装するには、どのように書いたらいいか教えていただけないでしょうか。例としてtest1のリンクからtab2へ行くように、です。 (下記実装されている機能は、タブメニューと他のページからのタブへのダイレクトリンクです。) <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script type="text/javascript"> jQuery(function($){  $(".area").hide();  var tabs = $(".tab01 li");  tabs.click(function(){   var i = tabs.removeClass("active").index(this);   tabs.eq(i).addClass("active");   $(".content .area").hide().eq(i).fadeIn(400);   return false;  });  var hash = window.location.hash.match(/#tab(\d+)/);  hash = hash?(tabs.eq(hash[1]-1).length?hash[1]-1:0):0;  tabs.eq(hash).click(); }); </script> </head> <body> <div id="tabs"> <ul class="tab01"> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> </ul> <div class="content"> <div class="area" id="tab1"><a href="#tab2">test1</a></div> <div class="area" id="tab2">test2</div> <div class="area" id="tab3">test3</div> </div> </div> </body> </html> 何卒宜しくお願い申し上げます。

  • クリックしたら文章が入れ替わるjQuery

    クリックしたら文章が入れ替わるjQuery http://www.sohtanaka.com/web-design/simple-tabs-w-css-jquery/ 上記のサイトを参考につくっています。 タブではないのですが、添付画像のように数字部分を押すと中央部分の文章が入れ替わるというものです。 1と2の部分は押すと文章が入れ替わり、3を押すと違うページに飛ぶようにしようと思っています。 3のページにも同じ1~3のナビを置き、3から1、3から2にも飛ぶようにしたいのですが、このjsのままだと2を押しても1の内容が表示されてしまいます。 それを変更したいのと、 1か2がactiveの時に今どっちの内容を表示しているかわかるように色を変えたいのですが、変わりませんでした。 (サンプルだとちゃんとタブが切り替わっているようにみえるのでそのようにしたい。) 以下私のコードです。 ■■■■■■■■■■■■HTML■■■■■■■■■■■■ <div id="nav"> <ul> <li class="tabs"><a href="#1" >1</a></li> <li class="tabs"><a href="#2">2</a></li> <li><a href="3.html">3</a></li> </ul> </div> <div class="container"> <div id="1" class="content"> 1の文章 </div> <div id="2" class="content"> 2の文章 </div> </div> ■■■■■■■■■■■■js■■■■■■■■■■■■ $(document).ready(function() { $(".content").hide(); $("li.tabs:first").addClass("active").show(); $(".content:first").show(); //On Click Event $("li.tabs").click(function() { $("li.tabs").removeClass("active"); $(this).addClass("active"); $(".content").hide(); var activeTab = $(this).find("a").attr("href"); $(activeTab).fadeIn(); return false; }); }); ■■■■■■■■■■■■CSS■■■■■■■■■■■■ #nav li a{ color:#8D8D8D; text-shadow: 0px 0px 3px #fff; } #nav li a:hover{ color:#8D8D8D; text-shadow: 1px 1px 0px rgba(0,0,0,0.8); } li.tabs active{ ←ここが変? color:#8D8D8D; } ド素人の上説明も下手で申し訳ありませんが、よろしくお願いいたします。

  • jqueryの tabを使用して外部リンクをしたい

    jqueryの tabを使用して外部リンクをしたい このサイトの下の方の マウスオーバーで切り替えを使用しているのですが タブをマウスオーバーで切り替えつつ、 タブ部分をクリックしたら外部にリンクさせるようするには どうしたらいいでしょうか? http://5am.jp/jquery/jquery_ui_tabs/ 以下タグです。 初心者で大変申し訳ありませんが、ご教授ください。 とても困っています。 よろしくお願いいたします。 ************************************************************* <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>無題ドキュメント</title> <head> <!-- jQuery --> <script type="text/javascript" src="jquery-1.4.2.js"></script> <script type="text/javascript" src="/jquery-ui-1.8.12.custom.min.js"></script> </head> <body> <script type="text/javascript"> <!-- jQuery( function() { jQuery( '#jquery-ui-tabs' ) . tabs( { event: "mouseover" } ); } ); // --> </script> <div id="jquery-ui-tabs"> <ul> <li><a href="#jquery-ui-tabs-1">タブ1</a></li> <li><a href="#jquery-ui-tabs-2">タブ2</a></li> <li><a href="#jquery-ui-tabs-3">タブ2</a></li> </ul> <div id="tab_area"> <div id="jquery-ui-tabs-1"> <ul> <li>タブ1内容</li> </ul> </div> <div id="jquery-ui-tabs-2"> <ul> <li>タブ2内容</li> </ul> </div> <div id="jquery-ui-tabs-3"> <ul> <li>タブ3内容</li> </ul> </div> <!--/#tab_area--></div> <!--/#jquery-ui-tabs--></div> </body> </html>

  • jquery returnについて

    貴重なスペースをお借りいたします。 jqueryを勉強中前々から調べてもよくわからない部分がございまして、 皆様のお力を貸して頂ければとおもいます。。。 jqueryのreturnについてなのですが、 あやふやな部分が多く、どこで使えるのか、どうゆうときに使うのかということが今だに理解できていないところがございます。 $('#photogallery li .imgArea').hide();//ページ上の画像を隠す $(window).bind("load", function(){ var interval = 300; //表示間隔 for(var i=0; i<$('#photogallery li .imgArea').length; i++) setTimeout(doFade(i), interval * i); function doFade(i){ return function(){ $('#photogallery li .imgArea').eq(i).fadeIn(1000); }; } }); 上記は画像のプリロードをするためのjqueryなのですが、最下部のreturn function~の部分ですね、 なぜreturnで関数を返さないといけないのかがさっぱりわかりません。 doFade(i)でfadeInを実行するならreturnをかかなくてもいいのではないかと思い困惑中です。 物分かりが良い方ではなく、どなたかわかりやすく説明していただける方がいたら、 どうぞ宜しくお願い致します。

  • jQuery タブとスライダーの併用

    jQuery UIを使ったタブの中ひとつひとつにスライダーを置きたいのですが どうしても1つめのタブでしかスライダーが正しく動作しません。 overflow:hidden; が原因なのでしょうか。 どのように書き換えれば動作するようになるでしょうか。 スライダーはflexsliderを http://flexslider.woothemes.com/thumbnail-controlnav.html タブはこちらページを参考にしました http://alphasis.info/2011/07/jquery-ui-tabs-bottom/ css #jquery-ui-tabs { font-size: 12px; color: #666666; } .jquery-ui-tabs-bottom { position: relative; } .jquery-ui-tabs-bottom .ui-tabs-panel { height: 410px;width: 80%; overflow: auto; } .jquery-ui-tabs-bottom .ui-tabs-nav { position: absolute !important; left: 1px; bottom: 1px; right: 1px; padding: 0 0px 0px 0px; } .jquery-ui-tabs-bottom .ui-tabs-nav li { margin-top: -1px; border: 1px solid #d3d3d3 !important; border-top: !important; border-radius: 10px !important; color: #666666; } .jquery-ui-tabs-bottom .ui-tabs-nav li:hover { margin-top: 0px; border: 1px solid #aaaaaa !important; border-top: !important; border-radius: 10px !important; } .jquery-ui-tabs-bottom .ui-tabs-nav li.ui-tabs-selected { margin-top: 0px; border: 1px solid #000 !important; border-top: !important; border-radius: 10px !important; background-color: #cd5c5c !important; } script <script type="text/javascript"> // Can also be used with $(document).ready() $(window).load(function() { $('.flexslider').flexslider({ animation: "slide", controlNav: "thumbnails" }); }); jQuery( function() { jQuery( '#jquery-ui-tabs' ) . tabs(); jQuery( '.jquery-ui-tabs-bottom .ui-tabs-nav, .jquery-ui-tabs-bottom .ui-tabs-nav > *' ) . removeClass( 'ui-corner-all ui-corner-top' ) . addClass( 'ui-corner-bottom' ); } ); </script> HTML <div id="jquery-ui-tabs" class="jquery-ui-tabs-bottom"> <ul> <li><a href="#jquery-ui-tabs-1">その1</a></li> <li><a href="#jquery-ui-tabs-2">その2</a></li> <li><a href="#jquery-ui-tabs-3">その3</a></li> </ul> <div id="jquery-ui-tabs-1"> <div class="flexslider"> <ul class="slides"> <li data-thumb="images/XXX.png"> <img src="images/XXX.png"> </li> <li data-thumb="images/XXX.png"> <img src="images/XXX.png"> </li> <li data-thumb="images/XXX.png"> <img src="images/XXX.png"> </li> </ul> </div> </div> <div id="jquery-ui-tabs-2"> <div class="flexslider"> <ul class="slides"> <li data-thumb="images/XXX.png"> <img src="images/XXX.png"> </li> <li data-thumb="images/XXX.png"> <img src="images/XXX.png"> </li> <li data-thumb="images/XXX.png"> <img src="images/XXX.png"> </li> </ul> </div> </div> <div id="jquery-ui-tabs-3"> <div class="flexslider"> <ul class="slides"> <li data-thumb="images/XXX.png"> <img src="images/XXX.png"> </li> <li data-thumb="images/XXX.png"> <img src="images/XXX.png"> </li> <li data-thumb="images/XXX.png"> <img src="images/XXX.png"> </li> </ul> </div> </div>

  • jQueryでfadeInのタイミング(Speed

    jQueryを勉強中で、こちらのページにある、 時間差で要素がフェードインするスプリクトを 参考にさせていただいています。 http://y-growth.com/blog/archives/281.html サンプルでは、 $("#fade li:nth-child(1)").fadeIn("5000",function() { $("#fade li:nth-child(2)").fadeIn("5000",function() { $("#fade li:nth-child(3)").fadeIn("5000", function(){ となっていて、等間隔でフェードインさせています。 このフェードの間隔を調整したいのですが、 $("#fade li:nth-child(1)").fadeIn("50000",function() { $("#fade li:nth-child(2)").fadeIn("10000",function() { $("#fade li:nth-child(3)").fadeIn("5000", function(){ このようにSpeedの値を変更しても、 等間隔でフェードインしてしまいます。 また、このような指定でも、同時にフェードインしてしまいます。 $("#fade li:nth-child(1)").fadeIn("50000"); $("#fade li:nth-child(2)").fadeIn("10000"); 何か見落としがあるのでしょうか? どなたか、どうぞよろしくお願いいたします。

  • jQuery UIについて

    今jQueryUITabsというプラグインを使ってタブによる切り替えを行おうとしています。 このプラグインでは、タブの内容をajaxのように他のページを読み込めるとのことで 以下のようなコードを書いてみました。 この場合に、tabs.htmlの方で、読み込んだ先のフォームがクリックされたのを検知するには どうしたらよいのでしょうか。 単純に、tabs.htmlのスクリプトの部分に次のようなコードを書いても「Undifined」が表示されてしまいました。 $("#form1").submit(function(){ alert($("#form1_text").val()); }); もし解決策をご存知でしたら、ご教授お願いいたします。 --------- Tabs.html ------------------ ++++++script++++++++ $(function(){ $("#tabs").tabs(){}); }) ++++++script++++++++ ++++++html++++++++ <div id ="tabs"> <ul> <li><a href = "test1.html">テスト1のフォーム</a></li> <li><a href = "test2.html">テスト2のフォーム</a></li> </ul> </div> ++++++html++++++++ --------- Tabs.html ------------------ --------- test1.html ------------------ <form id = "form1"> <input type = "text" id = "form1_text"> <input type = "submit" id = "form1_submit"> </form> --------- test1.html ------------------ --------- test2.html ------------------ <form id = "form2"> <input type = "text" id = "form2_text"> <input type = "submit" id = "form2_submit"> </form> --------- test2.html ------------------

  • jQueryタブメニュー内へのリンク方法。

    javascript勉強中です。 調べたり試してみたりしたのですが、なかなか上手くいかず質問させていただきました。 下記のjQueryを使ったタブメニューなのですが、他のページからタブ内(tab1~tab3)へリンクさせるjavascriptの書き方や方法を教えていただけないでしょうか。 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script type="text/javascript"> $(function($) { $(".area").hide(); $(".tab_content").hide(); }); jQuery.event.add(window,"load",function(){ $(".tab01 li:first-child").addClass("active"); $(".area:first-child").show(); $(".tab01 li").each(function(i){ $(this).click(function(){ $(".content .area").hide(); $(".content .area").eq(i).fadeIn(400); if($(this).hasClass("active")){ $(".tab01 li").removeClass("active");} else {$(".tab01 li").removeClass("active"); $(this).addClass("active"); } }); }); }); </script> </head> <body> <div> <ul class="tab01"> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> </ul> <div class="content"> <div class="area" id="tab1">tab1</div> <div class="area" id="tab2">tab2</div> <div class="area" id="tab3">tab3</div> </div> </div> </body> </html> どうぞ宜しくお願い致します。

  • ページの上下に同じタブメニューを付けたい

    現在、wordpressにて、タブメニュー入りのページを作っていますが、添付の画像のように、ページの上下に、連動したタブメニューをつける方法を教えてください。 ちなみに、 ヘッダーに↓の記述をし、 <script> <!-- jQuery( function() { jQuery( '#jquery-sample-tabs > ul > li' ) . click( function () { var str = jQuery( 'input', this ) . val(); jQuery( '#jquery-sample-tabs > div' ) . not( str ) . css( 'display', 'none' ); jQuery( str ) . css( 'display', 'block' ); jQuery( this ) . css( { 'backgroundColor': '#F3F3F3', 'border-bottom': 'none' } ); jQuery( '#jquery-sample-tabs > ul > li' ) . not( this ) . css( { 'backgroundColor': '#f60', 'border-bottom': 'solid 1px #F3F3F3' } ); } ) . first() . click(); } ); // --> </script> cssに↓の記述をし、 #jquery-sample-tabs { width:750px; background:#F3F3F3; } #jquery-sample-tabs ul { background:#000; margin: 0; padding: 5px 5px; } #jquery-sample-tabs ul li { display: inline; margin: 1px; padding: 5px 20px; border: solid 1px #888888; border-radius: 5px 5px 0px 0px; background-color: #F3F3F3; cursor: pointer; } #jquery-sample-tabs div { padding: 10px 15px; } HTMLに↓の記述をしています。 <div id="jquery-sample-tabs" class="jquery-sample-tabs"> <ul> <li> <input id="#jquery-sample-tab-1" type="hidden" value="#jquery-sample-tab-1-contents" /> タブ(1) </li> <li> <input id="#jquery-sample-tab-2" type="hidden" value="#jquery-sample-tab-2-contents" /> タブ(2) </li> <li> <input id="#jquery-sample-tab-2" type="hidden" value="#jquery-sample-tab-3-contents" /> タブ(3) </li> </ul> <div id="jquery-sample-tab-1-contents">(1)の内容</div> <div id="jquery-sample-tab-1-contents">(2)の内容</div> <div id="jquery-sample-tab-1-contents">(3)の内容</div> </div> よろしくお願いします。