2014-09-09 3 views
1

indexOf 메서드와 함께 delegate 메서드를 사용하여 YUI에서 탭 색인을 얻으려고합니다. 구체적으로는 내부에있는 이미지 클릭에 탭을 제거하고 싶습니다. 요소 :클릭시 노드 색인 얻기

var tabView = new Y.TabView({ 
    srcNode: '#data-table' 
}); 
... 
//creating tabs 
... 
var removeTab = function(e) { 
    var tabList = e.container.all('li'); //returns a list of the 'li' elements/tabs 
    tab = tabView.indexOf(e.currentTarget); 
    alert(tab); //returns -1 (node not found) 
    //tabView.remove(tab);   
} 
Y.one('#data-table').delegate('click', removeTab, 'img');//on click of the img, launch removeTab 

나는 유이가 내가 찾은이 가장 가이드를하는 간단한 방법을 가지고 있다고 생각하지 않는 구식 또는 탭 같은 방법으로 제거 구현하지 않습니다.

답변

1

문제는 위임 핸들러가 img 요소에 설정되어 있다는 것입니다 - 그래서 e.currentTarget (즉, 클릭 한)는 <img> 요소를 참조합니다.

그러나 e.container.all('li')을 사용하면 <li> 개의 요소 모음을 검색 할 수 있습니다. 이 컬렉션의 어떤 요소도 당연히 <img> 일 수 없습니다. 그렇기 때문에 indexOf이 실패합니다.

var liClicked = e.currentTarget.ancestor('li'); 
var tabIndex = tabList.indexOf(liClicked); 
+0

정말 감사하고 설명 @의 raina77ow에 대한 :

한 가지 가능한 솔루션은 다음의 인덱스를 확인 먼저 <img> 요소의 <li> 부모를 찾는 것입니다. 나는 'li'자체보다는 이벤트를 트리거하기 위해 li 요소 내에 아이콘을 가지고 있기 때문에 delegate 함수에서 'li img'를 매개 변수로 유지할 수있었습니다. –