2013-09-23 2 views
0

임 :자바 스크립트 이벤트 위임

$("ul > li.closed").click(function (e) { 
    if (e.target === this) { 
     var li = $(this).closest('li'); 
     li.find(' > ul').slideToggle('fast'); 
     $(this).toggleClass("closed open"); 
    } 
}); 

다른 모든 기능 나는 완벽하게 실행을 다시 작성했습니다, 그러나 이것은하지 않습니다. 여기에 내가 쓴 내용이 있습니다 :

$(document).on("click", "ul > li.closed", function (e) { 
    if (e.target === this) { 
     var li = $(this).closest('li'); 
     li.find(' > ul').slideToggle('fast'); 
     $(this).toggleClass("closed open"); 
    } 
}); 

자세히 알 수 있듯이, 저는 많이 변하지 않았습니다. ul은 열리지 만 더 이상 닫히지 않습니다. 내 실수는 어디 갔지?

+0

시도'$ ("UL")를 얻을 것이다 클래스 closed했다 그 당시 너무. on ("click", "li.closed", function (e) {' – karthikr

답변

3

문제는 li가 열리면에, 클래스 closed이 제거되고 open가 선택기 li.closed이 셀렉터가 게으르게 평가되는 이벤트 위임의 경우

일치하지 않는 의미, 추가되지만이다 핸들러를 처리하는 일반 이벤트의 경우 이벤트 등록시 대상 요소에 등록 된 적 요소가 핸들러에게

$(document).on("click", "ul > li:has(ul)", function (e) { 
    var li = $(this).toggleClass("closed open"); 
    li.children('ul').slideToggle('fast'); 
}); 
+0

왜 다른 점이 있습니까? –

+1

@FelixKling 방금 업데이트 됨 –

+0

그러면 li이 열리고 직접 닫힙니다. 다른 클릭 후에 만 ​​의도 한 것처럼 동작합니다. – sqe