Я использую плагин jQuery Address , чтобы сделать вкладки jQuery UI доступными для закладок и совместимыми с историей кнопок возврата. Прекрасно работает.
Однако мне было интересно, можно ли обеспечить такой же тип «глубоких ссылок» для вложенных вкладок? Например, у меня есть следующее:
<div id="tabs">
<ul class="links">
<li><a href="#one">main tab one</a></li>
<li><a href="#two">main tab two</a></li>
<li><a href="#three">main tab three</a></li>
<li><a href="#four">main tab four</a></li>
</ul>
<div id="one"> Main tab one content </div>
<div id="two">
Main tab two content
<div id="nested">
<ul>
<li><a href="#nestedone">nested tab one</a></li>
<li><a href="#nestedtwo">nested tab two</a></li>
<li><a href="#nestedthree">nested tab three</a></li>
</ul>
<div id="nestedone"> nested tab one </div>
<div id="nestedtwo"> nested tab two </div>
<div id="nestedthree"> nested tab three </div>
</div> <!-- end nested -->
</div>
<div id="three"> Main tab three content </div>
<div id="fout"> Main tab four content </div>
</div> <!-- end tabs -->
<script>
$(document).ready(function(){
/* main tabs stuff */
var $tabs = $("#tabs").tabs().addClass('ui-tabs-vertical ui-helper-clearfix');
$("#tabs li").removeClass('ui-corner-top').addClass('ui-corner-left');
/* nested tabs */
var $nested = $("#nested").tabs().addClass('ui-tabs-hz');
$("#nested ul").removeClass('ui-tabs-nav');
/* show the hash's tab whenever the address is changed */
$.address.change(function(event){
$("#tabs").tabs( "select" , window.location.hash ) ;
})
/* when the tab is selected update the url with the hash */
$("#tabs").bind("tabsselect", function(event, ui) {
window.location.hash = ui.tab.hash;
})
});
</script>
Все отлично работает для основного (внешние вкладки):
- ссылка href вкладки помещается на URL-адрес как правильно
- внешние вкладки подчиняются кнопкам браузера назад и вперед
- внешние вкладки можно закладывать
Однако я не могу получить такой же тип функциональности для внутренних вкладок.
Учитывая, что вложенные вкладки содержатся в одной из «главных» вкладок, вышеуказанная выше функция связывания видит $ (this) как внешнюю вкладку (даже если щелкнуть вложенную вкладку). В результате код JavaScript выполняется правильно для вложенной вкладки, но затем выполняется так, как если бы последняя главная (внешняя) вкладка была выбранной вкладкой.
Я не могу понять, как остановить выполнение JavaScript после обработки вложенной вкладки и до запуска последней главной (внешней) вкладки. Самое близкое, что я могу получить, это добавить следующее в функцию связывания и остановить выполнение на внешней вкладке, содержащей вложенные вкладки.
$("#tabs").bind("tabsselect", function(event, ui) {
if ($(ui.tab).closest('div').attr('id') !== "nested") {
window.location.hash = ui.tab.hash;
}
})
Я уверен, что упускаю что-то очевидное. Есть предложения?
Спасибо!