所以我有一些 jQuery UI 选项卡。源代码如下:
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(适用于所有未“tabified”的链接):
$("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;
};
});
}
});