나는 자신의 콘텐츠에 다른 탭 (아이 탭이라고 함)이있는 탭 (firsttab)을 가지고 있습니다. 우리는 tabshow-event를 첫 번째 탭에 바인딩합니다.하위 탭을 기준으로 Parallels 탭 쇼 이벤트가 트리거되는 이유는 무엇입니까?
우리가 "childtab"탭 (Tab 1.1 - Tab 1.3) 중 하나를 클릭하면 "firsttab"의 탭 중 하나를 클릭하면 모두 잘 작동합니다 (Tab 1 - Tab 5). "firsttab"에 대한 바인딩이 트리거됩니다.
테스트 케이스 : 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>
자바 스크립트 :이 이벤트에 바인딩 때문에 tabsshow 이벤트가 childtab에 의해 triggerd 왜 내가 understande down't
$("#firsttab, #childtab").tabs();
$("#firsttab").bind('tabsshow', function(event, ui) { funcX(ui.index); });
function funcX(idx){
alert('triggerd - index: ' + idx);
}
첫 번째 탭.
내 jquery-ticked의 답변은 다음과 같습니다. "이벤트 거품이 발생하고 대상을 확인하십시오." 그러나 나는 그가 의미하는 것을 이해합니다.
나는 내 tabsshow-이벤트 처리기를 변경하여 문제를 처리 :
$("#tabs").bind('tabsshow',
function(event, ui) {
if ((/#(.*?)$/im).exec(ui.tab.hash)[1] == this.id)
funcX(ui.index);
});
을하지만, 문제가 어디에 내가 이해할 것이다.
나는 이해한다고 생각한다. tabshow-event form childtab은 처리되지 않으므로 tabsshow 이벤트가 firsttab-eventhandler에 의해 처리 될 때까지 부모 요소까지 올라갑니다. 하지만 이벤트 처리기에 이벤트를 발생시키는 jquery는 "바보"가 아닙니다. 이 실수를 jquery하지 않을까요? firsttab_and_all_childs.tabshow.event가 아닌 firsttab.tabshow 이벤트에 내 이벤트 핸들러를 바인딩합니다. 내 의견으로는 jquery는 리퍼러 대상이 내가 이벤트 핸들러를 "takeallchildevent"옵션으로 바인딩하는 경우에만 이벤트를 발생시켜야합니다. – Floyd
두 번째 질문 : 솔루션에서 두 번째 이벤트 핸들러를 자식 탭에 바인딩합니다. 그러나 모든 탭에 다음과 같이 바인딩하는 것이 더 좋은 해결책은 아닙니다 : $ ("DIV.ui-tabs") bind ('tabsshow', function (event, ui) {event.stopPropagation();}); – Floyd
@floyddotnet - * 모든 이벤트는 버블 링됩니다. 버블이 계속 되더라도'return false' 나'.stopPropagation()'을 사용하지 않는 한, 이것은 DOM이 어떻게 동작 할 것인가에 대한 것입니다. jQuery없이). 두 번째 주석에 대해서는 완벽하게 유효한 접근법입니다. 탭을 만든 후 * 실행해야합니다. 그렇지 않으면'ui-tabs' 클래스가 아직 추가되지 않았습니다. 요소를 찾아 전달자를 바인드하는 셀렉터가 작동합니다. :) –