2

作業中のページで jquery-tools タブとカルーセルを使用しています。カルーセルはタブ内に埋め込まれ、タブは beforeClick コールバックで読み込まれます。

通常、カルーセルはドキュメント準備完了関数で次のように初期化されます。

$(function() { 
        // initialize scrollable 
        $("div.scrollable").scrollable({ 
                size: 3, 
                clickable: true, 
                loop: false 
            }).mousewheel(); 

カルーセルが beforeClick を介してロードされた場合、これは機能しません。これは、DOM の準備が整ったときに、このタブがまだロードされていないためです。

        $("ul.tabs").tabs("div.panes > div", {
          initialIndex: 0,
             onBeforeClick: function(event, i) {
                    // get the pane to be opened
                var pane = this.getPanes().eq(i);

                var src = this.getTabs().eq(i).attr("href");
                var langPattern = "/^" + getLang() + '/';
                var forceReload = false;
                if (src.match(langPattern) == null)
                {
                  src = getLang() + "/" + src;
                  forceReload = true;
                }
                if (pane.is(":empty") || forceReload) {
                    // load it with a page specified in the tab's href attribute
                    pane.load(src);
                    // initialize scrollable - ONLY SHOULD BE DONE ONCE
                $("div.scrollable").scrollable({ 
                    size: 3, 
                    clickable: true, 
                    loop: false 
                }).mousewheel(); 
                }
            }
      }).history();;

私の質問は2部構成です:

最初に、最初にロードされたときにスクロール可能を初期化するためにハンドラーを追加できるイベントはありますか? 第二に、ない場合、スクロール可能がまだ構築されているかどうかを確認する方法はありますか?

このコードの背後にある考え方は、ユーザーの言語選択に基づいてローカライズされた html フラグメントをロードすることです。これは、オンラインではなく CD のカタログ用です。

4

2 に答える 2

1

jQuery live eventをチェックしてみてください。このイベントは、現在および将来のすべての DOM 一致に一致します。

EDIT 1div.scrollableのイベント にバインドしたいのですがonload、正しいですか?

$('div.scrollable').live('load', function() {
    // etc.
});
于 2010-01-16T02:14:11.773 に答える
0

コールバックをコールバックに添付することで問題を解決しましたload

pane.load(src, "", function(){
  $("div.scrollable").scrollable({ 
        size: 3, 
        clickable: true, 
        loop: false 
    }).mousewheel();    
});
于 2010-01-16T14:42:45.697 に答える