jQueryでloadした部分に.jsが効かない

このQ&Aのポイント
  • jQueryでloadした部分に.jsが効かない問題が発生しています。
  • 同じjavascriptとhtmlを読み込んでいながら、A.htmlとB.htmlで動作が違う現象が起きています。
  • 量的な差があるページではload読み込みのタイミングに問題がある可能性があります。
回答を見る
  • ベストアンサー

jQueryでloadした部分に.jsが効かない

jQueryでloadした部分に.jsが効かない indexなどのページに、別のhtmlで作ったページをjQueryのloadで読み込んでいますが、 読み込んだ部分に、jQueryや他のjavaスクリプトが適応されないページがあり解消ができません。 問題点としましては、同じjavascript、同じhtmlを読み込んでいるはずなのに、 A.html、B.htmlにおいて動作が違うと言う点です。 具体例としましては、 A、Bは全く同じjQueryとロールオーバー用javascript(smartRollover)、ヘッダhtml、サイドhtml、フッタhtmlを読み込み、 内容部分だけ違うという程度ですが、 A.htmlではページ内全てロールオーバーが可能、 B.htmlでは内容部は可能、load読み込み部は不可能です。 A内容、B内容には量的にかなり差があり、比較でA>>>Bです。 そういった経緯から試しにAの内容を空にしてみると、Aも動かなくなりました。 上の結果から量が多いページだと適応されると判断し、結果としてload読み込みのタイミングでは? と思っておりますが、自分では解消することができませんでした。 ちなみに使用しているjqueryはjquery-1.4.2.min.jsです。 この場合どのような解消方法、または別の問題点が考えられるのでしょうか? どなたかに助言を頂きたく思いますので、宜しくお願いいたします。

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

処理の順序を考えてみればわかると思いますが、 想像では、ご使用のjsはhtml読込み時( onload )にイベントの設定を行なっているのだと思います。 一方、loadで読込まれるコンテンツは、その時点ではまだ存在していないため、イベントの設定がなさません。 そのために、ご質問のような事象がおきていると推測されます。 (質問文からだけで推測していますので、違う原因かも知れません) 後から要素が追加されても、イベント設定を反映することができるlive関数を用いるようにすればうよろしいかと。  http://api.jquery.com/live/  http://semooh.jp/jquery/api/events/live/type%2C+fn/ あるいは、loadで追加したコンテンツには別途で同様の設定するとか…

ReBirth1981
質問者

お礼

live関数によって解決できそうです、まだ不具合はありますが 前進しました。ありがとうございます。

ReBirth1981
質問者

補足

ご回答ありがとうございます。 live関数ですか、先ほど探している間にlive関数のことが何度か出てきたのですが、 関係ないと思い放置しておりましたが、言われてそんな気がしてまいりました。 再度上記サイトでlive関数の事を調べてみます、ありがとうございます。 ----- 追記なのですが、何故Aにだけ適用されているか 不具合と言ってしまえばそれまでなのですが、 理由をご教授いただければありがたいです。

その他の回答 (2)

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

No.2です。補足見ました。 案の上ですね smartRollover()を、window のonloadイベントに入れて、 smartRollover()内で、document.getElementsByTagName("img"); でimg要素を収集してますね。 $.load()のコールバック関数で、もう一回smartRollover()を 呼びだせばよいかも。  .load("url",function(){smartRollover();}) 他にもライブラリー使ってたら、同様に、 (とはいかないかも)

ReBirth1981
質問者

お礼

一応解決の見込みはたったのですが、こちらの例も勉強してみようと思いまして、 $(document).ready(function(){ $("#side-bar").load("./index.html #sub-side"); $("#side-bar").load("url",function(){smartRollover();}); }); これで合っていますでしょうか? 記述が正確か心配ですが結果は変わらずでした。 すみません、他の質問含め何度もありがとうございますです。

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

ご質問の意味を取り違えているかも知れませんが。 そもそも、jQueryのloadで、他ページのjavaスクリプトやCSSまで、 動的に取り込んで、反映させられるんでしょうか。 コンテンツだけじゃないでしょうか。 最初の自ページロード完了時に、自ページ内の要素を調べて、初期設定 するような作りのロールオーバーライブラリーだと、後から追加 された要素に関しては、うまくいかないかも知れません。 そおいった意味だと、各javascriptの実行順とタイミングが大きく 影響しますね。 いずれにせよ、情報が不足しているような.... うまくいかないB.htmlのscriptコード載せられませんか?

ReBirth1981
質問者

補足

ご回答ありがとうございます。 うまくいかないスクリプトのコードは http://www.anchor-gr.jp/labo_opensource_smartrollover.html スマートロールオーバーというjsです。具体的には簡素で ----------- function smartRollover() { if(document.getElementsByTagName) { var images = document.getElementsByTagName("img"); for(var i=0; i < images.length; i++) { if(images[i].getAttribute("src").match("_off.")) { images[i].onmouseover = function() { this.setAttribute("src", this.getAttribute("src").replace("_off.", "_on.")); } images[i].onmouseout = function() { this.setAttribute("src", this.getAttribute("src").replace("_on.", "_off.")); } } } } } if(window.addEventListener) { window.addEventListener("load", smartRollover, false); } else if(window.attachEvent) { window.attachEvent("onload", smartRollover); } ---- //そもそも、jQueryのloadで、他ページのjavaスクリプトやCSSまで、 動的に取り込んで、反映させられるんでしょうか。 コンテンツだけじゃないでしょうか。 >>Aのほうも全く同じ(メイン内容だけ違う)はずなのに適用されているのが、今回の問題の発生なんです。Aのほうでも無理であればまだ原因がわかりそうなものなんですが。。 //後から追加された要素に関しては、うまくいかないかも知れません。 >>やはりそうですか、、、なんとなくそう思っておりました。ありがとうございます。

関連するQ&A

  • jQuery.jsを使ったhtml外部読み込み方法

    JavaScript超初心者です。 何卒ご協力の程よろしくお願い致します!! タイトルの通り、jQuery.jsを使ってページのある部分に外部htmlファイルを読み込みたいと考えています。 以下のページを参考にやってみましたが上手くいきません。 http://blog.sugulab.com/?p=14 やってみたのは下記のような作業です。 まず、下記サイトより「jquery-1.9.1.min.js」ファイルをダウンロードし、「js」というフォルダに「jquery.js」として保存しました。 http://jquery.com/download/ 次に参照ページにならってhead要素内に下記のように記述しました。 <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript"> <!– $(function(){ $("#leftcontent").load("shopmenu.html"); }); // –> </script> body要素内には<div id="leftcontent"></div>と記述しています。 このleftcontentの部分に、同じ階層にある「shopmenu.html」を表示させたいのですが、何も表示されず困っています。 PHP等の知識は一切ない為、これでいけそうなら頑張りたいのですが・・・ ド素人の為、見当違いのご質問でしたらご容赦ください。 どなたかご教示、アドバイスの程よろしくお願い申し上げます!!m(*u_u*)m

  • JQueryでのloadの動作がFirefoxで動かなくて困っています

    JQueryでのloadの動作がFirefoxで動かなくて困っています。 サイトのheaderとfooterを外部htmlにして、JQueryのloadで呼び出し指定のdivに出力するようにしたいのですが、IEでは上手くいきましたが、FFでは全く動きません。 $(document).ready(function(){ $("#header").load("../js/header.html #header"); $("#footer").load("../js/footer.html #footer"); });

  • jQuery.jsを使ったhtml外部読み込み

    教えてください。 現在Jqueryを使用して外部htmlを読み込ませようとしていますが、 うまくいきません・・・ ■本体html <head> <script src="js/jquery-1.8.3.min.js"></script> </head> <body> <script type="text/javascript" src="sample.js"></scrip> <div id="sample"></div> </body> ■sample.js // JavaScript Document $(function(){ $("#sample").load("sample.html"); }); ■読み込ませるsample.html 特に設定なし このような感じですが、全然読み込めません。。。 javascriptを外部リンクにしているのは、読み込むhtmlが複数ある為、 headの見栄えが悪くなるからという個人的な意見です・・・ 済みませんがお知恵をお貸しください!!

  • jQuery利用コードのjs部分のデバッグ

    こちらのページを参考にデバッグをしたいのですがうまくいきません ▽Chromeでjavascriptデバッグ!まず半歩♪   http://www.slideshare.net/yuka2py/chromejavascript ■コード ・jQuery利用 ■困っていること ・「ブレークポイントを設定」して、「ステップオーバー」しているのですが、延々「ローカルに保存したjquery.js」の中を移動していくだけで、そこから抜け出すことができません ※jQuery利用コードのjs部分のデバッグをしたいのであって、jQueryのコード本体をデバッグしたいわけではありません ■知りたいこと ・「jQueryのコード本体(ローカルに保存したjquery.js)」を飛ばして、「ステップオーバー」していくにはどうすれば良いでしょうか?

  • jQuery

    http://bmath.org/wordpress/?p=663 上記を参考にWEBページをつくってみたのですが、上手くいきません。 javascript部分をhtmlの <script type="text/javascript" src="js/site.js"></script>にいれたからでしょうか? また、jsフォルダは<script type="text/javascript" src="js/jquery.scrollTo-min.js">ではなく、jquery.scrollTo-1.4.3.1を使っています。 よきアドバイスお願いします。

    • ベストアンサー
    • CSS
  • Jqueryのjavascriptが読み込まれません

    はじめまして。 Jqueryのsuperfishを使用したサイトを作っているのですが、javascriptファイルが読み込まれていないような状態になっています。 具体的には 1)ローカル環境では問題なく読み込まれている 2)サーバにアップすると、同階層の別ページ(A.htmlとします)では機能しているのに、特定のページ(B.html)では読み込まれていない ※A.htmlとB.htmlで同じ効果(superfishによるアコーディオンナビ実装)を得たい 3)A.htmlの<head>内javascriptに関する記述とB.html内同箇所の記述は全く同じ 4)B.html内の他の単独のjavascriptは問題なく読み込まれる という状況です。 この場合どのような原因が考えられるのでしょうか。 javascriptについては全くの初心者であり、どうにも解決できず、困っています。 ちなみに使用しているjqueryはjquery-1.2.6.min.jsです。 (大元であるA.htmlは違う方にコーディングしてもらい、そのデータを元にB.htmlをコーディングする作業をしています) jquery-1.2.6.min.jsもしくはsuperfish.js内に動かすhtmlへのパスが記載されているのかとも思いましたが、知識不足で該当の箇所が見つけられず…。 ご意見を頂ければ幸いです。 どうぞよろしくお願い致します。

  • jqueryのloadで読み込むとjsが動作しない

    jqueryの「load」を使ってajax通信を行おうとしているのですが、ロード先のjsが動作してくれません。 具体的には掲示板を作っていて、コメント入力のボタンをクリックすると、ロード先のHTMLが表示され、字数カウントのあるコメント入力欄が出現するという事例です。 コメント入力欄を読み込むことはできても、字数カウント(twitterのカウントのイメージ)部分が上手く動いてくれず困っています。(もちろんロード先を単体で動かした時には字数カウントは正常に行われます。) またあらかじめロード元に対象のjsを記入していても、上手くカウントされません。 このような場合の対処法をご存知の方は教えてください。 そもそもajaxを用いたプログラムを作成すること自体が始めてですので、根本的に使い方が間違っていましたら、恐縮ですが正しい使い方もご教授願います。

  • jQueryの多重読込

    2つのHTMLがあり、両方ともjQueryプラグインを使っています。 今回、a.html側に、jQuery loadで、b.htmlを読込みました。 ■a.html jQuery 本体 jQueryUI jQueryForm jQuery.HashChanged など基本js(多数) ■b.html jQuery.Gallerific jQuery.Fancybox jQuery.fixPing などメディア系統js(多数) ■困っていること 両方とも、$(function(){ ... }) 構文を使って、DOMの展開完了を待っているのですが、「読込まれる側=b,html」の、$(function(){ ... }) がうまく働いていないようなのです。 b.html 単体では何の問題もないのですが、a.htmlにloadされると、遅延読み込みがききません。 元である a.html で全部のjQuery プラグインを読むのは重すぎるため、各々で必要なプラグインを都度、読むようにしたいのですが、その場合、読み込まれる側の実行遅延(DOM展待ち)はどのようにしたらいいでしょうか?

  • javascript:名('.$data.')で複数のデータを送る方法,(jqueryのload利用)

    初めまして、jqueryを勉強し始めている初心者です。 jqueryのloadを利用して、PHPでページ分割作成してますが、 javascript:名('.$data.')で複数のデータを送る方法ご存知の方いましたら、教えていただけないでしょうか。。 何ぶん、勉強初めて、1ヶ月弱のため、不備等がれば、すみません。 hidden等でまとめてid作成すると、うまくページ分割ができませんでしたので javascript:名('.$data.')で複数のデータを送る方法を検討しています。。 環境、jquery1.4, PHP5.0, eclipse3.5, mysql5.0 (sql等は問題なく動作してます) //<php側抜粋--testo.php> <html> <head> <script type="text/javascript" src="jquery1.4.js"></script> <script type="text/javascript" src="testo.js"></script> <title></title> </head> <body> <div id="box"></div> <?php $nm=$_POST['nm']; $page_num=$_POST['page_num']; //echo'<a href="javascript:next('.$page.')">次のページへ>></a>'; //↑と1つの値であれば問題なく値をtesto.jsに渡しphploadできます。。 //↓のjavascript:名前('.データ値.')で、2つの値を //testo.jsでphpに渡しloadしたい。 //↓の解決策すみませんがご存知でしたら、教えてください。 //------ここ質問(1)------ echo'<a href="javascript:next('.$page.','.$nm.')">次のページへ>></a>'; ?></body></html> //testo.js----- /*function next(page) {$("#box").load("testo.php",{page_num:page});}  と1つの値であれば、POSTで正常にtesto.phpに渡せますが  2つ値を渡したいので、 おそらく、全然ちがったり、間違えていると思います。。 調べてみましたが、分かりませんでした。。 */ //--質問(2)↓-- function next(page,nm) {$("#box").load("testo.php",{page_num:page,nm:nm});} 質問は上記(1)(2)です。全ソース記載したいのですが、 文字数オーバーのため、記載できませんでした。。 すみません おそらく、不備や、勉強の不足さも感じるとは思いますが、 分かりやすく、ソース等で教えていただければ、幸いです。 すみません。。よろしくお願いいたします。

  • jQueryのloadメソッドをする際、別の仮想デレク卜リから要素のロ

    jQueryのloadメソッドをする際、別の仮想デレク卜リから要素のロードは不可能なのでしょうか? CのフォルダにjQuery.jsとロードされるテキスト・・・X.txtがあります。 EのフォルダにはY.htmlがありそこへデータをロードしたいと思います。 別の仮想デレク卜リですが可能でしょうか?うまく出来ないので無理なのでしょうか?何かの記事で別のホスト名のマシンを対象にしてもOKと見た気がするのですが・・・ Y.htmlにはこのような指定をしてあります。 <head> <!script type="text/javascript" src="../../A/B/C/jquery.js"></script> </head> ・ ・ ・ $("#dvcls").load( "../../A/B/C/X.txt .youso" ); ・ ・ ・ そもそも相対パス指定が間違っている???

専門家に質問してみよう