Данный плагин главным образом используется для разделения содержимого на несколько секций (разделов), взамен вы получаете дополнительное пространство, что схоже с интерфейсом, создаваемым плагином accordion.
По умолчанию переключение между отдельными секциями происходит по событию onClick, но данное событие может быть заменено на событие onHover с помощью опции. Содержимое секции может быть загружено через Ajax, указав ссылку в секции.
События (Events)Данные события возникают, когда происходит взаимодействие с интерфейсом секций:
• tabsselect, tabsload, tabsshow (in that order)
• tabsadd, tabsremove
• tabsenable, tabsdisable
Пример связанного события:
$('#example').bind('tabsselect', function(event, ui) {
// Объекты, которые доступны в контексте функции:
ui.tab // элемент – анкер выбранной секции (на которой произошло нажатие).
ui.panel // элемент, который содержит контент секции, выбраной с помощью интерфейса.
ui.index // основанный на нуле индекс выбранной секции (по которой произошло нажатие).
});
Учтите, что если обработчик события tabsselect вернет false, секция на которой произведен щелчок мыши не становится выбранной (полезно в примерах если переключение к следующей секции не допускается в связи с не заполнением формы).
AJAX НАСТРОЙКИДанный плагин позволяет загружать содержимое секций через 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>
Если ссылка теряет связь с ресурсом, загружаемым через AJAX, то содержание страниц, всё равно будет доступно с отключенным JavaScript.
Учтите, что если вы хотите многократно использовать содержимое существующего раздела, то это можно сделать выбрав соответствующий атрибут title и id элемента в котором находится содержимое:
<li><a href="hello/world.html" title="Todo Overview"> ... </a></li>
и контейнер:
<div id="Todo_Overview"> ... </div>
(обратите внимание, как пробел был заменён символом подчеркивания)
Это полезно, если вам необходим удобно читаемый хэш URL взамен скрытого URL.
Кнопка «назад» и закладкиПлагин Tabs 2 уже поддерживает данную функциональность, несмотря на то, что history плагин необходимо перписать впервую очередь (он не работает в Safari 3 и есть общие небольшие недостатки), до того как он сможет создать переход назад. Это планируется и Klaus работает всякий раз как находит время. Всё же текщие ошибки в UI Tabs плагине имют более высокий приоритет.
Как это использовать......вернуть индекс текущего выбранного разделаvar $tabs = $('#example').tabs();
var selected = $tabs.tabs('option', 'selected'); // => 0
...открытие ссылок в текущем разделе взамен того чтобы покинуть страницу"Hijax" ссылки будут загружены после содержимого разделов:
$('#example').tabs({
load: function(event, ui) {
$('a', ui.panel).click(function() {
$(ui.panel).load(this.href);
return false;
});
}
});
...выбор раздела с помощью текстовой ссылки взамен нажатия ссылок расположенных в заголовке разделовvar $tabs = $('#example').tabs(); // выбор первого раздела
$('#my-text-link').click(function() { // привязать событие click к ссылке
$tabs.tabs('select', 2); // переключится на третий раздел
return false;
});
...предупреждение переключения между разделами при нажатии в зависимости от проверки правильности заполнения формыВозвращая false, при выборе раздела, обработчик предотвращает выбор элемента, по которому произошло нажатие.
$('#example').tabs({
select: function(event, ui) {
var isValid = ... // проверка правильности формы, возвращающая true или false
return isValid;
}
});
...незамедлительно выбрать только что созданный разделvar $tabs = $('#example').tabs({
add: function(event, ui) {
$tabs.tabs('select', '#' + ui.panel.id);
}
});
...перход по ссылкам разделов URL взамен загрузки содержимого страниц на которые указывет данные ссылки через ajaxNote that opening a tab in a new window is unexpected, e.g. inconsistent behaviour exposing a usablity problem (http://www.useit.com/alertbox/tabs.html).
$('#example').tabs({
select: function(event, ui) {
var url = $.data(ui.tab, 'load.tabs');
if( url ) {
location.href = url;
return false;
}
return true;
}
});
...предупреждение FOUC (Flash of Unstyled Content) до того как плагин будет запущенДобавьте необходимые классы для сокрытия неактивных разделов панели к HTML немедленно – учтите,
что это не приводит к разрушению с отключенным JavaScript:
<div id="example" class="ui-tabs">
...
<div id="a-tab-panel" class="ui-tabs-hide"> </div>
...
</div>
Почему......my slider, Google Map, sIFR и т.п. не работают, когда они помещены в скрытый (неактивный) раздел?Любые компоненты, которые требуют вычисления размеров для их инициализации, не будут работать в скрытых
разделах, потому что панель разделов скрывается через свойство display: none, поэтому любые элемент для которых не указана их актуальная ширина и высота не будут отображены (0 в большинстве браузеров).
Данный недостаток легко обойти. Используя off-left technique для скрываемых неактивных разделов панелей. Например, замените в ваших стилях ".ui-tabs .ui-tabs-hide" следующим
.ui-tabs .ui-tabs-hide {
position: absolute;
left: -10000px;
}
Для Google карт вы можете так же изменить размеры карты, когда раздел будет отображён, например:
$('#example').bind('tabsshow', function(event, ui) {
if (ui.panel.id == "map-tab") {
resizeMap();
}
});
resizeMap() вызовет Google Maps' checkResize() для редких случаев.
Зависимости
• UI Core
• Для использования cookie: jquery.cookie.js
• Обязательный CSS:
.ui-tabs .ui-tabs-hide {
display: none;
}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<link href="jquery-ui-1.7.2.custom.css"
rel="stylesheet" type="text/css"/>
<script src="jquery-1.3.2.min.js"></script>
<script src="jquery-ui-1.7.2.custom.min.js"></script>
<script>
$(document).ready(function(){
$(function() {
$("#tabs").tabs();
});
});
</script>
</head>
<body class="iframe">
<div class="demo">
<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>Proin elit arcu, rutrum commodo,
vehicula tempus, commodo a, risus. Curabitur nec arcu.
Donec sollicitudin mi sit amet mauris.</p>
</div>
<div id="tabs-2">
<p>Morbi tincidunt, dui sit amet facilisis feugiat,
odio metus gravida ante, ut pharetra massa
metus id nunc. Aenean vel metus.
Ut posuere viverra nulla. Aliquam erat volutpat.
Pellentesque convallis. Maecenas feugiat,
tellus pellentesque pretium posuere, felis lorem euismod
felis, eu ornare leo nisi vel felis.
Mauris consectetur tortor et purus.</p>
</div>
<div id="tabs-3">
<p>Mauris eleifend est et turpis.
Duis id erat. Suspendisse potenti.
Aliquam vulputate, pede vel vehicula accumsan,
mi neque rutrum erat, eu congue orci lorem eget lorem.
.</p>
<p>Duis cursus. Maecenas ligula eros, blandit nec, pharetra at,
semper at, magna. Nullam ac lacus. Nulla facilisi. </p>
</div>
</div>
</div><!-- End demo -->
<div style="display: none;" class="demo-description">
<p>Click tabs to swap between content that is broken into logical sections.</p>
</div><!-- End demo-description -->
</body>
</html>