나는 여러 수준의 정렬되지 않은 목록이 있습니다. 클릭 핸들러를 목록 항목에 연결하려고 시도하고 클릭 할 때 클래스 active
을 추가하려고 시도하지만 하위 목록 항목을 클릭하면 클릭 핸들러가 하위 항목과 상위 항목 모두에 대해 트리거됩니다. 나는 모든 레벨에서 같은 요소 인 li
을 가지고 있다고 생각합니다. 이벤트를 특정 레벨에만 붙이는 방법은 무엇입니까?클릭 한 자식 목록 항목을 jQuery에서만 가져 오는 방법은 무엇입니까?
HTML 마크 업
<ul>
<li>test</li>
<li>test
<ul>
<li>test</li>
<li>test
<ul></li>
<li>test</li>
<li>test</li>
</li>
<li>test</li>
<li>test</li>
</ul>
JAVASCRIPT
$("li").click(multiLevelClickHandler);
function multiLevelClickHandler(event)
{
event.preventDefault();
var $this = $(this);
console.log($this);
var $actives = $this.siblings().find(".active");
if($actives.length > 0){
$actives.removeClass('active');
setTimeout(function(){
$this.addClass('active');
}, 250);
} else {
$this.addClass('active');
}
}
여기
입니다 JsFiddle : 여기
코드의 샘플이지만, 행동을 볼 수 jsfiddle 클릭 http://jsfiddle.net/zcLzA/개별적으로 클릭 핸들러를 연결하려고 시도했습니다. 각 레벨의 목록 항목이 있지만 항상 클릭 된 목록 항목뿐만 아니라 상위 항목에도 연결됩니다.
문제는 여기에 있다는 것입니다을, 하위 항목이 상위 항목에 포함되어 있기 때문에 클릭 한 위치에 상관없이 상위 항목도 클릭됩니다. 페이지의 링크를 클릭하는 장면에 대해 생각해보십시오. 링크를 클릭하면 본문을 클릭하게됩니다. –
이 문제를 해결하기 위해 답변을 업데이트했습니다. –