2012-06-22 5 views
2

2 div 요소가 있습니다. 하나는 자식 하나는 부모와 같은 :부모 - 자식 이벤트

<div id="p"> 
    <div id="c"> 
    </div> 
</div> 

parent 사업부가이 이벤트 clickdblclick를 부착 자식 DIV 1 이벤트가 click을 첨부했습니다. 이제 내 문제는 child div 부모 div 클릭 이벤트도 클릭했을 때입니다. 나는 e.stopPropagation();을 시도했지만 여전히 같은 행동을한다. 도와주세요 ?

+1

자바 스크립트를 게시 할 수 있습니까? 어쩌면 그것은 작은 오타 일 것입니다. –

답변

5

stopPropagation이 트릭을해야하기 때문에 틀렸어 야합니다. 당신은 자식 요소에서 이벤트의 전파를 중지해야합니다 :

$("#c").click(function (e) { 
    e.stopPropagation(); //Will prevent event bubbling to #p 
}); 

가 여기 working example입니다. 당신이 (더 이상 사용되지 않습니다 당신이 live 때문에 일을해서는 안)을 live 방법으로 이벤트 처리기를 바인딩 한 경우


위의 유일한 예외입니다. live 이벤트의 전파는 이벤트 처리기가 요소가 아닌 문서에 바인딩되어 있으므로 이벤트가 실행되기 전에 이벤트가 문서 전체로 전파되어야하므로 전파를 중지 할 수 없습니다.

+0

이전 버전의 jQuery를 사용하는 경우'.delegate()'가 작동하고 stopPropagation이 작동합니다. 그냥 팁 : – rlemon

0

이외에도 stopPropagation을 사용하면 이벤트를 처리하기 전에 상태를 확인할 수도 있습니다 (event delegation 접근 방법). 이 방법을 사용하면 live 이벤트 핸들러를 사용할 수도 있습니다 (올바른 경우 요즘에는 jQuery에서 on으로 바뀜). 참조 this fiddle

[편집] : bind를 사용하여, 당신은 단지 div#p에 대해 정의 된 모든 하나의 핸들러를해야합니다. 제공된 jsfiddle는 이에 따라 조정됩니다.

+0

''''''''''''''''''''''''''''''''''''오래된''오래된 버전의 오래된 클래스를 바인딩 할 때''delegate'''를 사용해야합니다. 또한 '생방송'은 느리며 쇠사슬을 달 수 없습니다. http://api.jquery.com/live/ 여기를 참조하십시오. – rlemon

+0

나는 그가 '생방송'을 사용한다고 말하지 않았고, 나는 단지 가능성으로 지적했다. 또한 이벤트 위임은 문서 수준 그 자체 일 필요는 없습니다. 그것은 어떤 루트 요소의 레벨에서 완벽하게 사용할 수 있으며, 말하자면 xhr은 그러한 요소의 하위 요소를 새로 고칩니다. 내가 제공 한 jsfiddle의 경우에는 루트 요소의 클릭 핸들러 일뿐입니다. – KooiInc