2011-01-19 4 views
14

object.stopPropagation()으로 이벤트 버블 링을 중지 할 수 있지만 어떻게 다시 사용할 수 있습니까?자바 스크립트 : stopPropagation을 활성화하는 방법은 무엇입니까?

js에 미리 정의 된 함수가 있습니까? 예 : object.startPropagation?

편집 :

문제는 당신은 내가 그것을 원하지 않아요 후에도 항상 이벤트 버블 링을 중지보다 "개체"를 클릭, 그래서 그것을 중지하려는 경우 JS는 기억이다 :

document.getElementById("object").onclick = function(e){ 
    if(e && e.stopPropagation) { 
     e.stopPropagation(); 
    } else { 
      e = window.event; 
      e.cancelBubble = true; 
    } 
} 
+0

몇 가지 정보 즉, 달성하려는 정보를 추가 할 수 있습니까? 당신이 멈추라 고 말하면 나는 그것을 시작할 필요가 없다. – GenericTypeTea

+0

나는 @GenericTypeTea – Adam

+0

질문을 편집했다. "내가 그것을 원하지 않아도"라고 말할 때 어떤 상황에서 원하지 않습니까? 이러한 상황을 나타내는 변수를 설정 한 다음 처리기에서 해당 변수를 확인해야합니다. 다른 솔루션을 선택하는 대신 실제로 코드를 게시 한 경우 도움이됩니다. – Kelvin

답변

25

값을 전혀 기억하지 못합니다. e 이벤트는 onclick이 해고 될 때마다 새로운 이벤트입니다. 문제는 당신이 항상 이벤트 버블 링을 취소하는 것입니다 :

if(foo) { 
    e.stopPropagation(); 
} else { 
    e.cancelBubble = true; 
} 
  • e.stopPropagation가 버블 링 이벤트를 방지하는 W3C 방법 입니다.
  • e.cancelBubble은 이벤트 버블 링을 방지하는 Microsoft 메서드입니다.

둘 다 동일합니다. 그래서 당신은 매번 이벤트의 버블 링을 취소합니다. More read here.

조건이 충족되는 경우에만 버블 링 취소됩니다 그래서 당신은 당신의 방법을 변경해야합니다

:

document.getElementById("object").onclick = function(e) { 

    if(e && e.stopPropagation && someCriteriaToStopBubbling === true) 
    { 
     e.stopPropagation(); 
    } 
    else if (someCriteriaToStopBubbling === true) 
    { 
      e = window.event; 
      e.cancelBubble = true; 
    } 
} 

UPDATE : 곰 염두에 현재 코드에서 if (e && e.stopPropagation)는 항상 true 될 것 브라우저가 stopPropagation을 지원하는 경우. 두 번째 중괄호 cancelBubble에 들어가면 마지막으로 설정 한 값을 기억하지 못합니다. this fiddle을 참조하십시오.

요약하면 요약하면 코드에서 매번 클릭 할 때마다 전파가 취소됩니다. 요소 계층까지 전파를 취소할지 여부를 결정하려면 함수에 몇 가지 기준을 지정해야합니다.

+0

나는 그것을 테스트하고 기억한다. 이벤트 버블 제거는 다른 이벤트에 의해 시작되는 함수 내에있다. 그리고 다른 객체를 클릭하면 이벤트 버블 링이 여전히 취소되고 함수 내부에 경고가 표시되며 함수를 시작하는 것보다 '객체'를 클릭하면 부모를 시작하지 않았다는 것을 기억하기 때문에 작동합니다. 이벤트 버블 링 함수의 함수, 어쩌면 내가 뭔가를 이해하지 못 하겠지만 이것은 내가 여기서 경험하는 것입니다 :). 하지만 당신의 해결책은 정확합니다. 거기에 몇 가지 IF ELSE 문을 넣을 수 있습니다. 나는 그것이 효과가 있기를 바랍니다. – Adam

+0

@CIRK - 당신이 뭔가 잘못하고 있습니다. ** 기억하지 못하기 때문입니다. 당신이 제공 한 것에. 여기를 참조하십시오 : http://jsfiddle.net/DgwSA/. 그 예제에서 버튼을 누를 때마다 cancelBubble은 항상 false가됩니다. 실수를 더 분명히하기 위해 업데이트를 추가했습니다. – GenericTypeTea

+0

이것을 확인하십시오 -> http://jsfiddle.net/DgwSA/1/ onclick이 변경되고 풍선도 취소됩니다. 그러나 경고하면 e.cancelbubble이 거짓을 표시하지만 프로젝트에서 이벤트 처리도 중지됩니다. – Adam