2

jQueryタブによってAjaxコンテンツとしてロードされているページに実装されている場合とされていない場合があるコールバックメソッドを呼び出したい。つまり、JSPファイルでレンダリングされたコンテンツをロードする一連のjQueryタブがあります。これらのファイルの中には、追加のAjaxコンテンツが含まれているものと、含まれていないものがあります。

私にできることは次のとおりです。

$(document).ready(function() {
    $("#menu").tabs( {
        cache: false,
        ajaxOptions: {cache: false},
        load: function(event, ui) {
            if (ui.index == index_of_tab_with_additional_content) {
                //call code defined in other places and embedded using <script> tags
            }
        }
    });
});

ただし、これにはいくつかの欠点があります。すべてのコールバックは、メインのタブページに埋め込まれたスクリプトで宣言する必要があります。また、依存する可能性のあるものはすべて、エレガントではありません。また、ページごとのif / elseステートメントを回避するために、同じコールバックを呼び出せるようにしたいと思います。要するに、私は次のようなものが欲しいです

load: function(event, ui) {
        callback();   //Each tab would implement this differently, or not at all
    }
}

残念ながら、コンテンツで宣言されているスクリプト関数を呼び出す方法がわかりませんでした。他のスレッドで述べられているように、JavascriptはjQueryによってロードされません。

どうやらこれにはオプションを設定する必要がありますが、どれかわかりませんでした。

オプションが設定され、JSがロードされた場合、どのように機能にアクセスしますか?ui.panel.funcname();になりますか??

ありがとう、ES

4

1 に答える 1

3

JQueryは、AJAXを介してロードされるドキュメントのヘッダーにあるスクリプトコンテンツをロードしませんが、本文からスクリプトコンテンツロードします。メインページのコードを(ハンドラーを使用して)使用したくない場合にこれを処理する最も簡単な方法は、メインページliveにタブに必要な外部スクリプトファイルをロードさせ、各タブのコンテンツに「コールバック」メカニズムを含めることです。タブがロードされたときに何をする必要があるかについて。注意する必要があります。すべてのタブが一度にDOMにロードされる可能性があるため、タブ間の名前の区別が必要になり、場合によっては、セレクターをタブコンテナーに相対するように修飾する必要がありますが、実行可能です。

元。

  <html>
  <head>
      ...
      <script type="text/javascript">
          // I'm not going to be loaded via AJAX
      </script>
  </head>
  <body>
  <div id="homeTab" class="tab-content">
       ...
       <a href="#" class="clickable button">Click Me</a>
       ...
  </div>
  <script type="text/javascript">
      $(function() {
          // here be stuff which runs when the tab is loaded
          var $tab = $('#homeTab');
          $('a.button',$tab).click( function() {
              ...do something...
              return false;
          });
      });
  </script>
  </body>
  </html>
于 2010-03-29T21:27:25.833 に答える