2011-03-05 2 views
1

내 코드는 HTML에 다음처럼 사용하는 방법 : (요소를 동적으로 표시하기 때문에)위임에 event.stopPropagation을()()

<li class="arrow">  
    <div> 
     <a href="javascript:void(0);" class="anchor">remove</a> 
    </div>      
</li> 

내가 deligate() JQuery와 방법을 사용하여 내 요소를 결합

$obj.delegate(".arrow", "click", function() { 
    alert("clicked on arrow"); 
}); 

$obj.delegate(".anchor", "click", function(event) { 
    event.stopPropagation(); 
    alert("anchor clicked"); 
}); 

".anchor"를 클릭하면 두 가지 이벤트가 발생합니다. 누구든지이 컨텍스트에서 event.stopPropagation()을 사용하는 방법을 말해 줄 수 있습니까? 위와 같았으나 작동하지 않았습니다. 이것을 할 수있는 다른 방법이 있습니까?

편집 : 나는 event.isPropagationStopped()를 호출 해 보았는데 true를 반환했다. 그러나 여전히 두 사건 모두 불렀다.

+0

: 여기

은 예입니다? – Zimbabao

+0

http://stackoverflow.com/questions/1522941/event-propagation-in-javascript – Andreas

답변

4

delegate 또는 live이 사용되고 stopPropagation 인 경우 제한 사항이 있습니다. 당신이 방지하기 위해 핸들러에서

당신은 모두 eventPropagationdefault

$obj.delegate(".anchor", "click", function(event) { 
    alert("anchor clicked"); 
    return false; 
}); 
+0

위대한 .. 그것은 작동합니다, 고마워요 :) – Bhupi

+0

와우, 내 답변을 작성하는 데 걸린 4 분 안에 많은 일이 일어났습니다 :) - .stopPropagation()을 코드에 남겨 두었던 이유가 있습니까? 나는이 맥락에서 아무것도하지 않는다고 믿는다. – lnrbob

+0

이유가 없습니다. 방금 부품을 복사했습니다. 나는 그것을 실수로 거기에서 버렸다. – Zimbabao

1

나의 이해는 .delegate와 함께 .live 당신이 return false 할 필요가 있다는 것입니다 시도 false을 반환합니다. 나는 이것이 사건이 어떻게 붙어 있느냐에 기인한다고 생각합니다. 그것은 요소가 아니라 조상입니다. 사용중인 버전 http://jsfiddle.net/G3k8Z/