У меня есть вкладка (называемая firsttab), в его содержимом есть еще одна вкладка (называемая childtab). Мы привязываем tabshow-событие к первой вкладке.
если мы нажмем одну из вкладок в «firsttab», все будет работать нормально (Tab 1 - Tab 5)
если мы нажимаем на одну из вкладок «дочерняя вкладка» (вкладка 1.1 - вкладка 1.3), запускается событие tabshow, связанное с «первой вкладкой».
Тестовый случай: http://jsfiddle.net/bM8Wh/
HTML:
<div id="firsttab">
<ul>
<li><a href="#firsttab_1">Tab 1</a></li>
<li><a href="#firsttab_2">Tab 2</a></li>
<li><a href="#firsttab_3">Tab 3</a></li>
<li><a href="#firsttab_4">Tab 4</a></li>
<li><a href="#firsttab_5">Tab 5</a></li>
</ul>
<div id="firsttab_1">
<div id="childtab">
<ul>
<li><a href="#childtab_1">Tab 1.1</a></li>
<li><a href="#childtab_2">Tab 1.2</a></li>
<li><a href="#childtab_3">Tab 1.3</a></li>
</ul>
<div id="childtab_1">Tab 1.1</div>
<div id="childtab_2">Tab 1.2</div>
<div id="childtab_3">Tab 1.3</div>
</div>
</div>
<div id="firsttab_2">Tab 2</div>
<div id="firsttab_3">Tab 3</div>
<div id="firsttab_4">Tab 4</div>
<div id="firsttab_5">Tab 5</div>
</div>
JavaScript:
$("#firsttab, #childtab").tabs();
$("#firsttab").bind('tabsshow', function(event, ui) { funcX(ui.index); });
function funcX(idx){
alert('triggerd - index: ' + idx);
}
Я не понимаю, почему событие tabsshow вызывается дочерней вкладкой, потому что я связываю это событие с первой вкладкой.
Ответ, на который я ставил jquery, звучал так: «Пузырь событий; проверь цель». но я понимаю, что он имеет в виду.
Я решил проблему, изменив свой обработчик событий tabsshow-event на:
$("#tabs").bind('tabsshow',
function(event, ui) {
if ((/#(.*?)$/im).exec(ui.tab.hash)[1] == this.id)
funcX(ui.index);
});
но я пойму, в чем проблема.