2011-08-31 2 views
2

div를 클릭하면 div를 닫는 방법과 관련된 다른 많은 질문을 읽었습니다.하지만 dived 문제가 있습니다. .live()로 바인딩 된 다른 요소가 있습니다.외부에서 클릭하면 DIV를 숨기려면 jQuery를 사용하지만 이벤트 전파는 허용하십시오

내가 원하는 것은 페이지의 아무 곳이나 클릭하면 '라이브'요소를 클릭하면 div가 사라져야한다는 것입니다. 그 라이브 요소를 클릭하면 핸들러가 정상적으로 진행되기를 원합니다.

지금까지 내가 읽은 것처럼 div를 닫는 것을 처리하는 기본적인 방법은 클릭 리스너를 $ 문서에 첨부하는 것이지만 다른 라이브 이벤트가 앞서 언급 한 body/doc 처리기를 버블 링하는 것을 방지합니다. 이 문제를 해결할 방법이 있습니까?

+0

: http://www.bennadel.com/blog/1751-jQuery-Live-Method-And -Event-Bubbling.htm – Steve

+0

아마도 도움이 될 수 있습니다. http://api.jquery.com/event.target/ – yoda

+1

메소드에서 false/call stopPropagation을 리턴하면 안되기 때문에 실제로 문제가 보이지 않습니다. div를 닫습니다. – Alxandr

답변

1

라이브에서 이벤트는 사다리를 맨 앞에서 맨 뒤로 맨 위로 거품을 일으 킵니다. 'live'요소의 클릭 (body 객체의 직접/간접 자식)에서 false를 반환하거나 전파를 중단하면 사다리가 위로 올라와 문서의 클릭 핸들러에 도달합니다. 실시간으로 문서의 클릭을 연결하는 것은 효과가없는 것 같습니다. 여기

확인 샘플 구현이 사이트가 어떻게 작동하는지 라이브()의 편리한 설명했다 http://jsfiddle.net/VHtSP/6/

$('div.menu').live('click', function(e) { 
    e.stopPropagation(); 
    alert('click inside menu. will not propagate.'); 
    return false; 
}); 

$(document).click(function() { 
    alert('document click() handler.'); 
    // close the div 
    $('div.menu').hide(); 
}); 

$('a').live('click', function() { 
    alert('<a> click() handler'); 
    // .. your code to handle the live element's click 
});