Tabs通常被用来将内容分成不同的场景片段来交换显示,类似于accordion.
通常tab不见通过点击一个tab标头来实现交换, 但是这个事件也可以是onHover. Tab的内容可以使用Ajax来获取其链接的内容.
目录 |
标签互动时的一系列事件:
事件绑定示例:
$('#example').bind('tabsselect', function(event, ui) {
// 函数上下文中可用的对象:
ui.tab // 所选择的tab锚点对象
ui.panel // 所选择的tab内容对象
ui.index // 所选择的tab的排序序列号(从0开始)
});
注: 如果tabsselect事件的处理程序返回false, 点击的tab将不会被选中 (例如:在一个表单验证中点击下一步时很有用).
Tab支持使用隐式的方式调用Ajax来加载内容.
你需要使用的HTML只有一点少许的不同: 列表的链接指向现有的资源 (从哪里加载内容)并且所有的内容项不需要多余的容器 (隐式的!). 容器标记将是即时创建的:
<div id="example">
<ul>
<li><a href="ahah_1.html"><span>Content 1</span></a></li>
<li><a href="ahah_2.html"><span>Content 2</span></a></li>
<li><a href="ahah_3.html"><span>Content 3</span></a></li>
</ul>
</div>
显然这会增强通用性, 例如. 内容的链接在JavaScript被禁用时依然有效.
注: 如果您还是想使用一个现有的容器,你可以给连接设置一个title属性,这个title属性要和内容容器的id相匹配(相同):
<li><a href="hello/world.html" title="Todo Overview"> ... </a></li>
容器设置为类似与下面这样:
<div id="Todo_Overview"> ... </div>
(注: 空格应使用下划线来代替)
这是非常有用的,如果你想使用一个人性化的读取散列来代替隐性生成的那个的话.
两个标签即支持此功能, 虽然历史记录插件第一次在tabs上建立功能时需要重写(不支持Safari 3,而且总体来说有点勉强). 但是事实上UI tabs插件中的bug自身总是有更高的优先.
var $tabs = $('#example').tabs();
var selected = $tabs.data('selected.tabs');
经过"Hijax" 链接后,加载tabs的内容:
$('#example').tabs({
load: function(event, ui) {
$('a', ui.panel).click(function() {
$(ui.panel).load(this.href);
return false;
});
}
});
var $tabs = $('#example').tabs(); // first tab selected
$('#my-text-link').click(function() { // bind click event to link
$tabs.tabs('select', 2); // switch to third tab
return false;
});
Returning false in the tabs select handler prevents the clicked tab from becoming selected.
$('#example').tabs({
select: function(event, ui) {
var isValid = ... // form validation returning true or false
return isValid;
}
});
var $tabs = $('#example').tabs({
add: function(event, ui) {
$tabs.tabs('select', '#' + ui.panel.id);
}
});
注意:标签中打开一个新窗口会让人感到意外, 例如. 不一致的行为暴露了可用性问题 (http://www.useit.com/alertbox/tabs.html).
$('#example').tabs({
select: function(event, ui) {
location.href = $.data(ui.tab, 'load.tabs');
return false;
}
});
立刻添加必要的样式隐藏无效的tab面板 - 注意:在将在JavaScript被禁用时不会影响页面效果:
<div id="example" class="ui-tabs"> ... <div id="a-tab-panel" class="ui-tabs-hide"> </div> ... </div>
其初始化需要一些空间计算的任何组成部分都不会工作在一个隐藏的tab中, 因为tab面板通过display: none来隐藏自己,所以任何在其中的元素都无法反馈自己的宽度和高度 (大多数浏览器返回0).
这里有一个简单的解决方法. 使用off-left 技巧来隐藏不活动的面板. 例. 在你的样式表中使用下面的代码替换 ".ui-tabs .ui-tabs-hide"
.ui-tabs .ui-tabs-hide {
position: absolute;
left: -10000px;
}
对于Google maps 你还可以使用下面的方法在它显示后调整大小:
$('#example').bind('tabsshow', function(event, ui) {
if (ui.panel.id == "map-tab") {
resizeMap();
}
});
resizeMap() 会在指定的地图上调用 Google Map 的 checkResize().
.ui-tabs .ui-tabs-hide {
display: none;
}$("#tabs").tabs();
<!DOCTYPE html>
<html>
<head>
<link type="text/css" href="themes/base/ui.all.css" rel="stylesheet" />
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="ui/ui.core.js"></script>
<script type="text/javascript" src="ui/ui.tabs.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#tabs").tabs();
});
</script>
</head>
<body style="font-size:62.5%;">
<div id="tabs">
<ul>
<li><a href="#fragment-1"><span>One</span></a></li>
<li><a href="#fragment-2"><span>Two</span></a></li>
<li><a href="#fragment-3"><span>Three</span></a></li>
</ul>
<div id="fragment-1">
<p>First tab is active by default:</p>
<pre><code>$('#example').tabs();</code></pre>
</div>
<div id="fragment-2">
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
</div>
<div id="fragment-3">
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
</div>
</div>
</body>
</html>
这个事件在点击一个tab的时候触发.
select事件进行操作.
$('.selector').tabs({
select: function(event, ui) { ... }
});
tabsselect类型来绑定select事件.
$('.selector').bind('tabsselect', function(event, ui) {
...
});
这个事件在一个远程的tab被加载以后触发.
load事件进行操作.
$('.selector').tabs({
load: function(event, ui) { ... }
});
tabsload类型来绑定load事件.
$('.selector').bind('tabsload', function(event, ui) {
...
});
这个事件在一个tab显示的时候触发.
show事件进行操作.
$('.selector').tabs({
show: function(event, ui) { ... }
});
tabsshow类型来绑定show事件.
$('.selector').bind('tabsshow', function(event, ui) {
...
});
这个事件在一个tab被添加后触发.
add事件进行操作.
$('.selector').tabs({
add: function(event, ui) { ... }
});
tabsadd类型来绑定add事件.
$('.selector').bind('tabsadd', function(event, ui) {
...
});
这个事件在一个tab被移除时触发.
remove事件进行操作.
$('.selector').tabs({
remove: function(event, ui) { ... }
});
tabsremove类型来绑定remove事件.
$('.selector').bind('tabsremove', function(event, ui) {
...
});
这个事件在一个tab被启用时触发.
enable事件进行操作.
$('.selector').tabs({
enable: function(event, ui) { ... }
});
tabsenable类型来绑定enable事件.
$('.selector').bind('tabsenable', function(event, ui) {
...
});
这个事件在一个tab被禁用时触发.
disable事件进行操作.
$('.selector').tabs({
disable: function(event, ui) { ... }
});
tabsdisable类型来绑定disable事件.
$('.selector').bind('tabsdisable', function(event, ui) {
...
});
完全移除tabs功能. 这将使元素返回到之前的初始化状态.
禁用 tabs.
启用 tabs.
获取或者设置tabs参数. 如果没有提供参数值则是获取.
添加一个新的tab. 第二个参数是一个url地址或者是一个组成的片段标识符,只允许在Ajax tab上创建一个页内的tab或者一个完整的url (相对或绝对, 不支持跨域). 第三个参数是该tab要插入的位置标识(从0开始,可选参数). 默认新添加的tab会添加到最后一个位置.
移除一个tab. 第二个参数是一个从0开始的标识,它标识了要移除的tab在tabs中的排序位置.
让一个tab启用. 可以设置属性象下面这样一次重置多个tab的disabled属性: $('#example').data('disabled.tabs', []);. 第二个参数是要启用的tab在tabs中的排序位置(从0开始).
禁用一个tab. 当前选中的tab不能被禁用. 一个禁用多个tab的用法: $('#example').data('disabled.tabs', [1, 2, 3]); 第二个参数是要启用的tab在tabs中的排序位置(从0开始).
选中一个tab, 如果它被点击过. 第二个参数是要选中的tab在tabs中的排序位置(从0开始)或者是一个选择该tab内容面板区域的选择器(selector)(tab的href片段标识, 例如. 指向面板id的序列).
使用Ajax加载一个重新面板的内容. 即使cache设置为true这个方法也始终从远程地址获取tab的内容. 第二个参数是要加载的内容区在tabs中的排序位置(从0开始).
改变一个Ajax(远程)tab要加载的url地址. 指定的URL讲在之后的加载中使用. 注意:你不仅可以用此方法更改一个现有的远程tab,还可以用它使一个页内tab成为一个远程tab. 第二个参数标识了第几个tab要更新URL(从0开始). 第三个参数是要加载的地址.
返回tabs第一次匹配的tab的数量.
终止tab中所有在运行的ajax和动画效果.
设置一个面板自动轮换的tab. 第二个参数是轮换到下个面板之前显示多长的时间(单位毫秒). 设置为0或者null可终止轮换. 第三个参数设置在用户选择了一个tab后是否还自动轮换,默认:false.
jQuery UI Tabs插件使用jQuery UI CSS 框架的外观和风格,包括颜色和背景纹理.我们建议您使用ThemeRoller工具来创建和下载的自定义主题,很容易建立和维护.
如果有更深层次的个性化需要,有特定类别的工具ui.tabs.css样式可供参考,可以修改这些参考。这些课程是下面以高亮和粗体显示的。
Note: 注:这是一个示例tabs插件所产生的标记,而不是你应该使用的标记.创建一个tabs唯一需要的标记是
<div id="tabs">
<ul>
<li><a href="#tabs-1">Nunc tincidunt</a></li>
<li><a href="#tabs-2">Proin dolor</a></li>
<li><a href="#tabs-3">Aenean lacinia</a></li>
</ul>
<div id="tabs-1">
<p>Tab 1 content</p>
</div>
<div id="tabs-2">
<p>Tab 2 content</p>
</div>
<div id="tabs-3">
<p>Tab 3 content</p>
</div>
</div>.