だから私はいくつかのjQueryUIタブを持っています。ソースコードは次のとおりです。
HTML:
<div class="tabs">
<ul>
<li><a href="#ranges">Ranges</a></li>
<li><a href="#collections">Collections</a></li>
<li><a href="#designs">Designs</a></li>
</ul>
<div id="ranges"></div>
<div id="collections"></div>
<div id="designs"></div>
</div>
jQuery:
$(document).ready(function() {
$(".tabs").tabs();
});
私の問題は、関連するリンクをクリックすると、各タブがコンテンツパネルにページをロードするようにしようとしていることです。まず、リンクをクリックしてすべてのパネルのhtmlを設定しようとしています。以下のコードから、方法1を使用すると、すべてのリンクで機能します。ただし、方法2を使用する場合は使用しませんが、タブ内のリンク(つまり、クリックしてタブを選択するラベル)に対してのみ使用します。
方法1(常にすべてのリンクで機能しますが、これが呼び出された後に追加されるリンクには適用されません):
$("a").click(function () {
$("#ranges, #collections, #designs").html("clicked");
});
方法2(「タブ化」されていないすべてのリンクで機能します):
$("a").live("click", function () {
$("#ranges, #collections, #designs").html("clicked");
});
なぜそれがこのように振る舞うのか誰かが知っていますか?ページが最初にロードされた後に追加されるクリックイベントを追加する必要があるリンクがある可能性があるため、メソッド2を正しく機能させたいと思います。
前もって感謝します、
リチャード
PSはい、関数はそれが問題である可能性があると誰かが言う前に、関数が要求し.live
、.click
両方が関数内$(document).ready()
にあります-そうでなければ、それはまったく機能しません。
編集:
私が思いついた解決策には、アンカーの追加属性(data-url)と次のコード(ページを読み込めない場合に404 not foundエラーを出力する)が含まれます。私はこれを今後数週間/数ヶ月にわたって拡大し、より強力にすることを目指しています。
$(".tabs").tabs({
select: function (event, ui) {
$(ui.panel).load($(ui.tab).attr("data-url"), function (responseText, textStatus, XMLHttpRequest) {
switch (XMLHttpRequest.status) {
case 200: break;
case 404:
$(ui.panel).html("<p>The requested page (" + $(ui.tab).attr("data-url") + ") could not be found.</p>");
break;
default:
$(ui.panel).html("<p title='Status: " + XMLHttpRequest.status + "; " + XMLHttpRequest.statusText + "'>An unknown error has occurred.</p>");
break;
};
});
}
});