• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:JSが正常な動作しないのはなぜ?)

JSが正常な動作しないのはなぜ?

このQ&Aのポイント
  • HPを、ファイルから読み込んで表示するように変更しようと、Adobe Spry(Tab)とPrototype.jsを使って、JSで組みました。が、最後のSpryがなぜか(タブ機能が)機能しません。
  • デバッグ環境はFireFox3.5.7+FireBug on WindowsXP SP3+Apache2.5です。問題のソースは、csvファイルを読み取って、HTMLコードを生成し、Spryの指定のID(tabPanel1)に挿入して、Spryを起動するようにしています。
  • 起動直前にブレイクポインタを入れてとめると、ちゃんとタブが機能するようになります。ここ数日ははまっていて、最後の関門でうまくいかず困っています。

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

  • ベストアンサー
回答No.2

言わんとするとこは、「データの処理を待つ」です。 プロセス管理というかマルチスレッド管理かなと思います。 Ajax.RequestにあるonSuccessが良い例かと思います。 これはデータの処理を待つ一つの方法ですね。 このメソッドは予定している処理の完了を待たずに次の処理に移ります。 Javascriptの持つイベントハンドラにもonloadとかがありますが、あれと同じです。 第2引数にあるobjectのonSuccessやonFailureは「データの取得が終わったら」動かしたい関数です。 Requestメソッドに渡したonSuccessがtabPanel1のDOMを作ってるんですよね。きっと。 Spry.Widget.TabbedPanels()ではtabPanel1をかっこよくするためのものかな?と思うのです。 つまり、 1.データの読み込み 2.データの形成 3.データをカッコよくする てな処理の流れになると思うのです。 この処理に時間差があることに気を使う必要があります。 クロージャとかEventListenerなどを調べてみると良いかもしれません。

nza49739
質問者

お礼

大変参考なりました。ありがとうございました。 完全にできることを確認できるまでと思いましたが、現在、中断しているため、また、新たな疑問として別とアップすることにします。

その他の回答 (1)

回答No.1

>起動直前にブレイクポインタを入れてとめると、ちゃんとタブが機能するようになります ということなので、時間差でObjectが出来上がる前に操作をしようとしているんじゃないですか? var tbObj1 = new Spry.Widget.TabbedPanels("tabPanel1"); ↑こいつの処理タイミングを変えてみるとか。 $('tabPanel1').innerHTML = src1 + src2 ; 勘だとこれの次あたり。

nza49739
質問者

補足

言わんとするところは、プロセス管理をして、 var myData = new Ajax.Request( "data/linkdata.csv" , { の処理が終わるまで待てばよいという意味でしょうか? しかし、Javascriptでプロセス管理ができるのでしょうか?できないのであれば、もともと無理ということ?