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


Answers

드롭 다운 메뉴 외부에서 클릭 이벤트를 사용하여 드롭 다운 메뉴를 닫는 방법 코드를 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();
    }
})
Question

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




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>




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

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

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




Links