2012-04-11 4 views
1

다음 사이트의 이미지 중 하나 위에 마우스를 올려 놓으면 div가 동작 버튼과 함께 나타납니다. div를 클릭하면 팝업 창이 열리 며, 다른 이벤트가 발생하는 하위 작업 버튼을 클릭하면 열립니다.javascript 이벤트 전파 중지

div의 하위 버튼 중 하나를 클릭하면 팝업이 발생합니다. 아래 코드를 사용하여 이벤트 전파를 중지하려고했습니다. 아무도 도와 줄 수 있습니까? 이벤트가 위임되어 있기 때문에

http://penguinenglishlibrary.tumblr.com/

$(document).on('click', '#DOMWindow .like', function(event) { 
    event.preventDefault(); 
    event.stopPropagation(); 

}); 
+1

ID가 'DOMWindow'인 요소가 실제로 있습니까? –

+0

버튼 대신 문서의 이벤트를 재정의하는 이유가 무엇입니까? –

+1

@BrandtSolovij : 그것이 "라이브"또는 "위임 된"이벤트가 작동하는 방식입니다. –

답변

3

당신은 전파를 중지 할 수 없습니다. 위임이 실제로 필요한가요? 즉 바인딩시 #DOMWindow .like이 이미 존재합니까? 나중에 코멘트에 말했듯이,

$('#DOMWindow .like').on('click', function(event) { 
    event.preventDefault(); 
    event.stopPropagation(); 
}); 

을 또는 : 당신이 정말로 위임을해야하는 경우, 그 경우에 핸들러 논리를 포장 할 수

경우는, 당신은 다음과 같이 할 수 않습니다 event.target이 #DOMWindow .like인지 확인합니다. 그렇다면 핸들러가 그 일을하도록하십시오. 그렇지 않으면 버블 링을 의미하므로 아무것도하지 마십시오. 당신이 jQuery를 (.selector ')에 이벤트를 첨부 asuming

+0

바인딩 할 때 존재하지 않으므로 이벤트를 취소 할 수있는 방법이 있습니까? 개체가 생성 될 때 – Burt

+0

이벤트를 바인딩하십시오. –

+0

나는 할 수없는 동일한 반응을 보였다. 그 때 누군가는 제공하고 응답한다. 참조 : http://stackoverflow.com/questions/10082508/button-with-two-event-functions-how-to-stop-the-second-during-the-first-functio –

1

아마도

jQuery('#DOMWindow .like').unbind('mouseenter mouseleave'); 

. 가져가()는 당신이 당신의 이벤트가 결합되는 방식으로 전파를 중지 할 수 없습니다

0

를 작동 할 수 있습니다. document에 묶여 있습니다. 이벤트가 document에 도착하면 이벤트는 상단으로 버블 링되므로 이벤트가 이미 전파되었으므로 중지 할 수 없습니다.

에 더 가까운 부모 요소 (예 : #DOMWindow)에 이벤트를 바인딩하십시오. 참고 : 이벤트를 바인딩하는 요소는 이것이 호출 될 때 DOM에 있어야하며 DOM에 있어야합니다.

$('#DOMWindow').on('click', '.like', function(event) { 
    event.preventDefault(); 
    event.stopPropagation(); 
}); 

내가 만든이 예제를 확인하십시오. http://jsfiddle.net/QAZ3v/ 내게 무슨 뜻인지 알려주셔야합니다. 기본적으로 jQuery를에에() 함수에 대한 설명서에 따르면

0

,

, 최대 문서 요소 원래 이벤트 대상에서 대부분의 이벤트 거품. 도중에있는 각 요소에서 jQuery는 첨부 된 일치하는 이벤트 핸들러를 호출합니다. 핸들러는 event.stopPropagation()을 호출하여 이벤트가 문서 트리 위로 버블 링되는 것을 방지 할 수 있으므로 해당 요소의 핸들러가 실행되지 않도록 할 수 있습니다. 그러나 현재 요소에 연결된 다른 핸들러는 실행됩니다. 이를 막으려면 event.stopImmediatePropagation()을 호출하십시오. (요소에 바인딩 이벤트 핸들러. 그들이 결합 된 것과 같은 순서로 호출된다)

는 그래서

event.stopImmediatePropagation(); 

당신을 위해 무엇을 찾고있는 것 같습니다. 거짓을 돌려주는 것도 효과가있을 수 있지만 확실히 확신 할 수는 없습니다.

소스 : http://api.jquery.com/on/

편집 : 바이올린에 내 제안을 모두 테스트 후에 나타납니다 클릭 핸들러도 작동하는지. 나는 그들이 on()을 위해 일하는지 아는 것에 흥미가있을 것이다.

+0

그것이 작동하지 않았다, 답변 주셔서 감사합니다 – Burt

관련 문제