2011-03-03 6 views
1

내가 텍스트 상자 값을 변경할 때 팝업 div를 만들려고하는데 div 외부의 아무 곳이나 클릭하여 닫을 수 있습니다 (표시 여부 : 없음). Google 제안 드롭 다운 메뉴와 유사합니다.자동 완성 검색 제안 드롭 다운 팝업

div 또는 외부에서 마우스 클릭이 발생한 날씨를 어떻게 알 수 있습니까?

javascript 및 jsp를 사용하여 구현해야합니다.

도와주세요.

+0

이 질문은 관련이있을 수 (검색 쿼리와 유사 배열에서 단어를 찾는) : http://stackoverflow.com/questions/11377096/find-similar-words-in-array-of -words –

+0

또한 다음은 유사한 단어를 찾는 데 도움이되는 관련 질문입니다. http://stackoverflow.com/search?q=javascript+levenshtein+distance –

답변

1

JQuery와 솔루션은

$("body > div").click(function() { 
if ($(this).attr("id") == "div-id") { 
    // inside the DIV 
} else { 
    // not inside the DIV 
} 
}); 

또는

$("html").click(function (e) 
{ 
if (e.target == document.getElementById("div-id")) 
    alert("Inside DIV"); 
else 
    alert("Outside DIV!"); 
}); 

것 또는 자바 스크립트 코드 조각은 다음과 같이 될 것이다 :

<script type="text/javascript"> 
document.onclick=check; 
function check(e){ 
var target = (e && e.target) || (event && event.srcElement); 
var obj = document.getElementById('div-id'); 
if(target!=obj){obj.style.display='none'} 
} 
</script> 
+0

이 줄을 설명해 주시겠습니까? "var target = (e && e.target) || (event && event.srcElement);" – kanap008

+2

함수'check'는 문서가 아무 곳이나 클릭되었을 때 호출되며'click' 이벤트를 전달합니다.그 행은 이벤트가 실제로 (대부분의 브라우저에서) 함수에 인수로 전달되는지 그렇지 않은지 (다른 브라우저, 아마도 IE) 전역 변수'event'에서 이벤트를 잡아 내려고 시도합니다. – Dan

+1

순수 자바 스크립트를 작성하는 것은 일반적으로 모든 브라우저에서 올바르게 작동하도록 다른 코드를 작성해야하기 때문에 성가신 일입니다. 그래도 jQuery를 사용하면 커튼 뒤에있는 모든 것을 처리하므로 특정 브라우저를 처리하는 것을 잊어 버릴 염려가 없습니다. – Dan

1

한 가지 방법은 전체 화면 (보이지 않음)을 덮는 div를 팝업하고 두 div의 클릭을 캡처하여 두 팝업 div를 닫는 것입니다. body 태그에서 클릭 수를 캡처 할 수도 있습니다. 그러면 div 외부의 아무 곳에서나 클릭을 잡을 수 있습니다 (또는 이벤트가 거품이 나면 div 내에서 일부 테스트를 수행 할 수 있습니다).

때로는 마우스를 몇 초 동안 누르면 메뉴가 사라지는 팝업 CSS 메뉴와 같은 시간 제한을 사용하는 것이 더 쉬운 방법 일 수 있습니다. 당신은 onmouseleave 이벤트를 잡아 타이머를 시작하고, 또 다른 onmouseenter이 없다면 2 초 후에 팝업 div를 숨길 수 있습니다.

희망이 도움이됩니다.

+0

한 가지 질문입니다. 백그라운드 div가 전체 화면을 덮고 있기 때문에 팝업 div를 클릭하면 div가 닫힙니다. 내가 틀렸다면 나를 바로 잡아주세요. – kanap008

+1

@ kanap008 : 클릭 이벤트가 버블 링되지 않은 경우가 아닙니다. 'window.event.cancelBubble = true;'를 사용하여 두 div에 전달되는 이벤트를 중지 할 수 있습니다. http://www.quirksmode.org/js/events_order.html – mellamokb

+0

jQuery의'e.stopPropagation()'이 커튼 뒤에있는 것을 참조하십시오. – Dan

0

여기 jQuery로 예입니다. "test"텍스트를 클릭하면 다른 텍스트가 나타납니다. 새로 등장한 텍스트 이외의 다른 곳을 클릭하면 사라집니다.

클릭 이벤트가 내부에서 발생한 경우 (이 경우 .toggle 개체) 여기를 클릭하면 e.stopPropagation()으로 전화가 전달되어 더 이상 전체 창으로 전파되지 않기 때문입니다. 그러나 클릭이 다른 곳에서 발생하면 창에 직접 전파되어 .toggle이 사라집니다.

jsfiddle에서 작동하는 example을 참조하십시오.

<script src="js/jquery-1.4.4.min.js"></script> 
<script> 
    $(function(){ 
     $('.test').bind('click', function(e){ 
      $('.toggle').fadeIn(); 
      e.stopPropagation(); 
     }); 
     $('.toggle').bind('click', function(e){ 
      e.stopPropagation(); 
     }); 
     $(document).bind('click', function(){ 
      $('.toggle').fadeOut(); 
     }); 
    }); 
</script> 

<a class="test" href="#">test</a> 
<div class="toggle">asdasdsa</div> 
+0

미안하지만 jquery, 심지어 기초 모르겠다. 하지만 고마워요 – kanap008

+0

당신은 정말로하지 않아도됩니다. 이것은 자바 스크립트를위한 프레임 워크 일 뿐이므로 함수를 이벤트에 쉽게 바인딩하고 DOM 트리에서 객체를 찾는 것이 더 쉬워집니다 (다른 것들 중에서). 이 예제를 만들기 위해해야 ​​할 일은 웹 사이트에서 jquery js를 다운로드하고 코드의 첫 줄에 html로 포함시키는 것입니다. – Dan

관련 문제