[Javascript] 외부를 클릭하여 jquery 드롭 다운 메뉴 닫기


Answers

드롭 다운을 숨기려면 DOM까지 모든 거품을 알리고 드롭 다운의 부모에게는 버블 링을 멈추게하는 모든 클릭을 말할 수 있습니다.

/* Anything that gets to the document
   will hide the dropdown */
$(document).click(function(){
  $("#dropdown").hide();
});

/* Clicks within the dropdown won't make
   it past the dropdown itself */
$("#dropdown").click(function(e){
  e.stopPropagation();
});

데모 : http://jsbin.com/umubad/2/edit

Question

jquery 간단한 드롭 다운 메뉴를 개발하고있다. 사용자가 트리거 영역을 누르면 드롭 다운 영역을 토글합니다. 내 질문은 드롭 다운 메뉴 외부에서 클릭 이벤트를 사용하여 드롭 다운 메뉴를 닫는 방법입니다.




선택한 대답은 하나의 드롭 다운 메뉴에서만 작동합니다. 여러 가지 해결책은 다음과 같습니다.

$('body').click(function(event){
   $dropdowns.not($dropdowns.has(event.target)).hide();
});



일부 특정 요소에서 이벤트 전파를 중지하면 다른 일부 스크립트가 실행되지 못하게되어 위험 할 수 있습니다. 따라서 트리거링이 함수 내부에서 제외 된 영역에 있는지 확인하십시오.

$(document).on('click', function(event) {
  if (!$(event.target).closest('#menucontainer').length) {
    // Hide the menus.
  }
});

이 기능은 문서를 클릭 할 때 시작되지만 #menucontainer에서 트리거링을 제외합니다. 자세한 내용은 https://css-tricks.com/dangers-stopping-event-propagation/을 참조 하십시오.




드롭 다운 메뉴 외부에서 클릭 이벤트를 사용하여 드롭 다운 메뉴를 닫는 방법? 코드를 heres

$(document).click(function (e) {
    e.stopPropagation();
    var container = $(".dropDown");

    //check if the clicked area is dropDown or not
    if (container.has(e.target).length === 0) {
        $('.subMenu').hide();
    }
})



https://jsfiddle.net/vgjddv6u/ 에서 작동하는 또 다른 다중 드롭 다운 예제

$('.moderate .button').on('click', (event) => {
  $(event.target).siblings('.dropdown')
    .toggleClass('is-open');
});

$(document).click(function(e) {
  $('.moderate')
    .not($('.moderate').has($(e.target)))
    .children('.dropdown')
    .removeClass('is-open');
});
<link href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.4.0/css/bulma.css" rel="stylesheet" />

<script
  src="https://code.jquery.com/jquery-3.2.1.min.js"
  integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
  crossorigin="anonymous"></script>

<style>
.dropdown {
  box-shadow: 0 0 2px #777;
  display: none;
  left: 0;
  position: absolute;
  padding: 2px;
  z-index: 10;
}

.dropdown a {
  font-size: 12px;
  padding: 4px;
}

.dropdown.is-open {
  display: block;
}
</style>


<div class="control moderate">
  <button class="button is-small" type="button">
        moderate
      </button>

  <div class="box dropdown">
    <ul>
      <li><a class="nav-item">edit</a></li>
      <li><a class="nav-item">delete</a></li>
      <li><a class="nav-item">block user</a>   </li>
    </ul>
  </div>
</div>


<div class="control moderate">
  <button class="button is-small" type="button">
        moderate
      </button>

  <div class="box dropdown">
    <ul>
      <li><a class="nav-item">edit</a></li>
      <li><a class="nav-item">delete</a></li>
      <li><a class="nav-item">block user</a></li>
    </ul>
  </div>
</div>




일부 요소에 클릭 이벤트를 첨부해야합니다. 페이지에 다른 요소가 많으면 클릭 이벤트를 모든 요소에 첨부하고 싶지 않을 것입니다.

하나의 잠재적 인 방법은 드롭 다운 메뉴 아래에 투명 div를 만드는 것이지만 페이지의 다른 모든 요소 위에 만듭니다. 드롭 다운이 표시되면이를 표시합니다. 요소에 드롭 다운을 숨기는 클릭 핸들러와 투명한 div가 있어야합니다.

$('#clickCatcher').click(function () { 
  $('#dropContainer').hide();
  $(this).hide();
});
#dropContainer { z-index: 101; ... }
#clickCatcher { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 100; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="dropDown"></div>
<div id="clickCatcher"></div>