2013-08-09 4 views
16

누군가 event.preventDefault()event.stopPropagation()의 차이점을 설명 할 수 있습니까?event.preventDefault 대 event.stopPropagation

나는 테이블이 있으며 테이블 내에 img 태그가 있습니다.

img 태그를 클릭하면 팝업이 표시됩니다.

하지만 여러 행의 선택을 중지하려면, 그래서 내가 사용 :

내가 JS 코드를 사용
$("table.items tbody tr").click(function(event) { 
     event.stopPropagation(); 
    }); 

, 팝업이 표시되지 않습니다;

js 코드를 삭제하면 팝업이 작동합니다.

$(".info").live("click",function(e){ 
    //console.log('ok'); 
    e.stopPropagation(); 
    var elem = $(this); 
    var id = $(this).attr("id").replace("image_","container_"); 
    $('#'+id).toggle(100, function() { 
     if($(this).css('display') == 'block') { 
      $.ajax({ 
       url: "$url", 
       data: { document_id:elem.attr('document_id') }, 
       success: function (data) { 
        $('#'+id).html(data); 
       } 
      }); 
      } 
     }); 
}); 

왜?

+2

이것은 당신에게 도움이 될 것입니다. http://davidwalsh.name/javascript-events – L10

+1

html 구조를 보여 주어 이미지가 테이블 구조와 관련이있는 곳을 알려줍니다. – Huangism

+0

'click'에서 선택을 중지하기에는 너무 늦었습니다. 'mousedown '을 사용하십시오. – canon

답변

35

나는 자바 스크립트 전문가가 아니라고하지만 내가 아는 한 :

stopPropagation

확실히 이벤트가 버블 링 체인을하지 않는 만드는 데 사용됩니다. 예. <td> 태그를 클릭하면 해당 부모의 클릭 이벤트 ( <tr>)가 발생하고 그 다음에 부모 <table> 등이 표시됩니다. stopPropagation은 이러한 일이 발생하지 않도록합니다.

preventDefault은 요소의 정상적인 작동을 중지시키는 데 사용됩니다. 링크의 클릭 핸들러에 preventDefault이 링크가 따라 가기를 멈추거나 제출 버튼을 누르면 제출중인 양식이 중지됩니다.

+0

@CrisimIlNumenoreano 귀하의 의견은 말이되지 않습니다. sevenseacat의 대답은 내게 100 % 정확하고 [dup question]에 대한 답변으로 확인할 수 있습니다 (http://stackoverflow.com/questions/5963669/whats-the-difference-between-event-stoppropagation-and-event- preventdefault)뿐만 아니라 [event.preventDefault()] (http://api.jquery.com/event.preventdefault/) 및 [event.stopPropagation()] (https : //api.jquery)에 대한 jQuery 설명서를 참조하십시오. com/event.stoppropagation /). – Trisped

+0

stopPropagation도 캡처 단계를 중지합니까? –

+0

나는이 두 함수 ('stopImmediatePropagation'를 세어 본다면 3 가지)를 둘러싼 혼란이 전파 전파를 막아서 자동으로 기본값을 막지 못하는지 의심 스럽다. 그것은 그렇게 보입니다. – doug65536

6

이벤트 preventDefault From W3C:

에서는 event.preventDefault() 메소드에서 일어나는 소자의 기본 동작을 정지한다. 예 :

가 event.stopPropagation() 메소드의 버블 링을 중단 :

방지는 형태가 URL 다음 에서 링크 방지 제출로부터 제출 버튼 이벤트 stopPropagation From W3C

부모 이벤트 처리기가 이 실행되는 것을 방지하는 부모 요소의 이벤트. 아이

7
  • stopPropagation 아이에 이벤트를 중지하는 아이부모 (전체 조상)
  • preventDefault에서 일어나는에서 해당 이벤트를 중지하지만 합니다 학부모 (및 조상도 마찬가지 임)

이제 코드가 부모입니까? 아이는 무엇입니까?img은 자식입니다 tr은 부모입니다 (솔직히 조부모님입니다). 따라서 stopPropagation 코드가 있어야 할 위치를 추측합니다.

+0

나는 이것이 틀렸다는 인상을받습니다. 나는 stopPropagation이 아이의 행동을 멈추지 않을 것이라고 생각한다. – user1884155

+0

당신은 아마도 preventDefault에 대해 이야기하고 있지만 내 의견은 stopPropagation 설명을 겨냥한 것입니다. 사용자 rps는 내 의견을 말하면 그의 답변을 수정했습니다. – user1884155

+0

@Trisped, @ user1884155 맞아요, 당신이 말하는 것은 'preventDefault'의 것 같습니다. 그리고 처음에는'stopPropagation'이 나중에 @ user1884155에 의해 수정 된 어떤 아이의 이벤트도 멈추게 할 것이라고 잘못 말했습니다. – rps