2011-10-05 2 views
0

표시되는 도움말 div가 있습니다. 클릭이 div 외부에 있으면 도움말 div가 닫히도록했습니다.jquery가 ID와 일치하는 항목이 있는지 확인하기 위해 DOM을 버블 링합니다.

사용자가 div를 클릭하면 div가 열려 있어야합니다. 정규 자바 스크립트의 경우, 부모의 ID와 일치하는 코드를 사용합니다. 내 부분 JS 코드는

var click = (e && e.target) || (event && event.srcElement); 
var match = "divid"; 

while(click.parentNode){ 
     if(click==match) { 
     return;//do nothing 
      }//if 

이 재귀 JavaScript 코드에 해당하는 jquery는 무엇입니까?

TIA

혼란을 피하기 위해 편집 됨.

+0

페이지의 아무 곳이나 클릭하면들을 수있는 이벤트가 있지만 문제는 '열린'div가 포함되어 있다는 것입니다. 이 div를 제외한 모든 것을 듣고 싶을뿐입니다. 또는 더 정확하게는 div에서 수신 할 수 있지만 클릭이 들리면 아무 것도 수행하지 않아야합니다. 그 맞습니까? –

+0

@ 집합, 예. 클릭이 div 안에 있으면 div를 닫아서는 안됩니다. – Jamex

답변

0

false를 반환하면 제대로 작동합니다. 여기

jQuery("#divid").click(function(event) { 
    event.stopPropagation(); 
}); 

바이올린 : 또는 당신은 jQuery를에 내장 된 유틸리티 함수 인 stopPropagation()를 사용할 수 http://jsfiddle.net/W8MfD/

반환 잘못된 방법 것입니다 내가 이해, false를 반환하기 전에 여전히 거품까지.

이러한 종류의 이벤트를 많이 사용하면 예상되는 일종의 위젯 프레임 워크를 사용하면 도움이 될 것입니다. 당신이 만드는 행동의 종류는 평범하고 대부분의 프레임 워크는 이미 가지고 있습니다. jQuery UI는 나쁘지 않습니다. (제 의견으로는 더 좋을 수도 있지만). 저 밖에 다른 사람들도 있습니다.

+0

안녕하세요, gregp, 감사합니다. 그 부분을 이해합니다. 나는 버블 링하는 법을 알고 싶다. 또한, 어떤 이유로 든 해당 코드가 초기로드에서 제대로 작동하지 않으며 한 번 실행 된 후에 만 ​​올바르게 작동합니다. – Jamex

+0

피들에서 항상 처음으로 실행됩니다. 실제로 타이밍을 해결하기 위해 .click() 대신 .delegate()를 사용하는 것을 선호하지만, 나는 그것을 빠르게 던져 버렸다. 귀하의 질문에 관해서는 : 수동으로 거품을 일으키고 싶다면 jQuery가 필요하지 않습니다. 나는 당신의 초기 질문에서 그것을 놓친 것 같아요. –

관련 문제