복붙노트

[JQUERY] 클릭 안쪽에 드롭 다운 메뉴 가까이하지 마십시오

JQUERY

클릭 안쪽에 드롭 다운 메뉴 가까이하지 마십시오

해결법


  1. 1.데이터 속성 데이터 토글 = "드롭"를 제거하고 개방 구현 / 클로즈 드롭의 용액 일 수있다.

    데이터 속성 데이터 토글 = "드롭"를 제거하고 개방 구현 / 클로즈 드롭의 용액 일 수있다.

    먼저이 같은 열기 / 닫기 드롭 다운 링크에 클릭을 처리하여 :

    $('li.dropdown.mega-dropdown a').on('click', function (event) {
        $(this).parent().toggleClass('open');
    });
    

    다음과 같이 닫습니다 드롭 다운의 외부 클릭을 듣고 :

    $('body').on('click', function (e) {
        if (!$('li.dropdown.mega-dropdown').is(e.target) 
            && $('li.dropdown.mega-dropdown').has(e.target).length === 0 
            && $('.open').has(e.target).length === 0
        ) {
            $('li.dropdown.mega-dropdown').removeClass('open');
        }
    });
    

    여기 데모입니다 : http://jsfiddle.net/RomaLefrancois/hh81rhcm/2/


  2. 2.이뿐만 아니라 도움이 될 것입니다

    이뿐만 아니라 도움이 될 것입니다

    $(document).on('click', 'someyourContainer .dropdown-menu', function (e) {
      e.stopPropagation();
    });
    

  3. 3.부트 스트랩은 다음과 같은 기능을 제공합니다 :

    부트 스트랩은 다음과 같은 기능을 제공합니다 :

                     | This event is fired immediately when the hide instance method 
    hide.bs.dropdown | has been called. The toggling anchor element is available as the 
                     | relatedTarget property of the event.

    따라서이 기능을 구현하는 닫을 수 드롭 다운을 해제 할 수 있어야한다.

    $('#myDropdown').on('hide.bs.dropdown', function (e) {
        var target = $(e.target);
        if(target.hasClass("keepopen") || target.parents(".keepopen").length){
            return false; // returning false should stop the dropdown from hiding.
        }else{
            return true;
        }
    });
    

  4. 4.절대 가장 좋은 대답은 클래스 드롭 다운 메뉴 후 폼 태그를 넣어하는 것입니다

    절대 가장 좋은 대답은 클래스 드롭 다운 메뉴 후 폼 태그를 넣어하는 것입니다

    코드가 너무

    <ul class="dropdown-menu">
      <form>
        <li>
          <div class="menu-item">bla bla bla</div>
        </li>
      </form>
    </ul>
    

  5. 5.이 힘 도움말 :

    이 힘 도움말 :

    $("dropdownmenuname").click(function(e){
       e.stopPropagation();
    })
    

  6. 6.또한 해결책을 발견했다.

    또한 해결책을 발견했다.

    트위터 부트 스트랩 구성 요소 관련 이벤트 핸들러는 문서 객체, I 루프에 첨부 된 핸들러를 위임하고 현재 클릭 된 요소 (또는 부모 중 하나가) 위임 된 이벤트에 의해 관련되어 있는지 확인된다고 가정.

    $('ul.dropdown-menu.mega-dropdown-menu').on('click', function(event){
        var events = $._data(document, 'events') || {};
        events = events.click || [];
        for(var i = 0; i < events.length; i++) {
            if(events[i].selector) {
    
                //Check if the clicked element matches the event selector
                if($(event.target).is(events[i].selector)) {
                    events[i].handler.call(event.target, event);
                }
    
                // Check if any of the clicked element parents matches the 
                // delegated event selector (Emulating propagation)
                $(event.target).parents(events[i].selector).each(function(){
                    events[i].handler.call(this, event);
                });
            }
        }
        event.stopPropagation(); //Always stop propagation
    });
    

    희망은 비슷한 솔루션을 찾고 하나를 할 수 있습니다.

    당신의 도움에 대해 감사합니다.


  7. 7.

    $('body').on("click", ".dropdown-menu", function (e) {
        $(this).parent().is(".open") && e.stopPropagation();
    });
    

    이것은 어떤 조건에서 작동 할 수 있습니다.


  8. 8.jQuery를 :

    jQuery를 :

    <script>
      $(document).on('click.bs.dropdown.data-api', '.dropdown.keep-inside-clicks-open', function (e) {
        e.stopPropagation();
      });
    </script>
    

    HTML :

    <div class="dropdown keep-inside-clicks-open">
      <button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">
         Dropdown Example
        <span class="caret"></span>
      </button>
      <ul class="dropdown-menu">
        <li><a href="#">HTML</a></li>
        <li><a href="#">CSS</a></li>
        <li><a href="#">JavaScript</a></li>
      </ul>
    </div>
    

    데모:

    일반적인: https://jsfiddle.net/kerryjohnson/omefq68b/1/

    이 솔루션 데모 : http://jsfiddle.net/kerryjohnson/80oLdtbf/101/


  9. 9.나는이 간단한 일을 시도하고 그것이 마치 마법처럼 일했다.

    나는이 간단한 일을 시도하고 그것이 마치 마법처럼 일했다.

    나는

    에서 드롭 다운 메뉴의 요소를 변경하고 그것을 잘 작동.

    <div class="nav-item dropdown" >
      <a href="javascript:;" class="nav-link dropdown-toggle" data-toggle="dropdown">
       Click to open dropdown
     </a>
     <form class="dropdown-menu   ">
      <ul class="list-group text-black">
         <li class="list-group-item"  >
         </li>
         <li class="list-group-item"   >
         </li>
      </ul>
    </form>
    

    <스크립트 SRC = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"> <스크립트 SRC = "https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"> <스크립트 SRC = "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"> <링크 HREF = "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"REL = "스타일"/>

    열려있는 드롭 다운을 클릭
    • 목록 항목 1
    • LI 2
    • 목록 항목 3


    • 10.나는 부트 스트랩 4.3와 함께 작동하도록 바르 탄의 대답 @ 수정했습니다. 클릭이 배치 된 곳 target 속성은 항상 상관없이 드롭의 루트 사업부를 반환하지 않기 때문에 그의 해결책은 최신 버전으로 더 이상 작동하지 않습니다.

      나는 부트 스트랩 4.3와 함께 작동하도록 바르 탄의 대답 @ 수정했습니다. 클릭이 배치 된 곳 target 속성은 항상 상관없이 드롭의 루트 사업부를 반환하지 않기 때문에 그의 해결책은 최신 버전으로 더 이상 작동하지 않습니다.

      여기에 코드입니다 :

      $('.dropdown-keep-open').on('hide.bs.dropdown', function (e) {
        if (!e.clickEvent) {
          // There is no `clickEvent` property in the `e` object when the `button` (or any other trigger) is clicked. 
          // What we usually want to happen in such situations is to hide the dropdown so we let it hide. 
          return true;
        }
      
        var target = $(e.clickEvent.target);
      
        return !(target.hasClass('dropdown-keep-open') || target.parents('.dropdown-keep-open').length);
      });
      
      <div class="dropdown dropdown-keep-open">
        <button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
          Dropdown button
        </button>
        <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
          <a class="dropdown-item" href="#">Action</a>
          <a class="dropdown-item" href="#">Another action</a>
          <a class="dropdown-item" href="#">Something else here</a>
        </div>
      </div>
      

    • 11.

      $('body').on("click", ".dropdown-menu", function (e) {
          $(this).parent().is(".show") && e.stopPropagation();
      });
      

    • 12.나는 최근에 비슷한 문제를 가지고 데이터 속성 데이터 토글 = "드롭 다운"을 제거하고 듣기 클릭 event.stopPropagation으로 ()를 호출 그것을 해결하기 위해 다양한 방법을 시도했습니다.

      나는 최근에 비슷한 문제를 가지고 데이터 속성 데이터 토글 = "드롭 다운"을 제거하고 듣기 클릭 event.stopPropagation으로 ()를 호출 그것을 해결하기 위해 다양한 방법을 시도했습니다.

      두 번째 방법은 바람직 보인다. 또한 부트 스트랩 개발자는이 방법을 사용합니다. 소스 파일에서 나는 드롭 다운 요소의 초기화를 발견 :

      // APPLY TO STANDARD DROPDOWN ELEMENTS
      $(document)
      .on('click.bs.dropdown.data-api', clearMenus)
      .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
      .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
      .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
      .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)
      }(jQuery);
      

      그래서,이 라인 :

      .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
      

      드롭 다운 메뉴를 닫은 방지하기 위해 클래스 .dropdown과 용기 안에 폼 요소를 넣을 수 있습니다 제안합니다.


    • 13.부트 스트랩은 드롭 다운에서 태그에 대한 지원이 문제 자체를 해결했다. 이들 솔루션은 확실히 잡을 수 있고 당신은 그것을 여기에서 읽을 수 있습니다 https://github.com/twbs/bootstrap/blob/v4-dev/js/src/dropdown.js

      부트 스트랩은 드롭 다운에서 태그에 대한 지원이 문제 자체를 해결했다. 이들 솔루션은 확실히 잡을 수 있고 당신은 그것을 여기에서 읽을 수 있습니다 https://github.com/twbs/bootstrap/blob/v4-dev/js/src/dropdown.js

      이 문서 요소에서 전파를 방지 만 셀렉터에 일치하는 유형 'click.bs.dropdown.data-API'의 이벤트에 대해 이렇게 귀결 '.dropdown 부여됨 - 사용자 정의 클래스-에 대한 킵 오픈에 '- 요소 - 클릭.

      또는 코드

      $(document).on('click.bs.dropdown.data-api', '.dropdown .keep-open-on-click', (event) => {
          event.stopPropagation();
      });
      

    • 14.

      $('ul.nav.navbar-nav').on('click.bs.dropdown', function(e){
          var $a  = $(e.target), is_a = $a.is('.is_a');
          if($a.hasClass('dropdown-toggle')){   
              $('ul.dropdown-menu', this).toggle(!is_a);
              $a.toggleClass('is_a', !is_a);
          }
      }).on('mouseleave', function(){
          $('ul.dropdown-menu',this).hide();
          $('.is_a', this).removeClass('is_a');
      });
      

      나는 가능한 한 똑똑한 기능으로 다시 한번 업데이트했다. 지금은 가까운 당신이 가져가 순자산 가치 (NAV) 외부에 개방 남아 당신은 그 안에있는 동안 때. 간단하게 완성.


    • 15.예를 부트 스트랩 4 알파에 대한 마찬가지로이 메뉴의 이벤트가 있습니다. 왜 사용하지?

      예를 부트 스트랩 4 알파에 대한 마찬가지로이 메뉴의 이벤트가 있습니다. 왜 사용하지?

      // PREVENT INSIDE MEGA DROPDOWN
      $('.dropdown-menu').on("click.bs.dropdown", function (e) {
          e.stopPropagation();
          e.preventDefault();                
      });
      

    • 16.당신은 전파 드롭 다운에 클릭을 중지 한 후 수동 회전 목마 자바 스크립트 방법을 사용하여 회전 목마 컨트롤을 구현할 수 있습니다.

      당신은 전파 드롭 다운에 클릭을 중지 한 후 수동 회전 목마 자바 스크립트 방법을 사용하여 회전 목마 컨트롤을 구현할 수 있습니다.

      $('ul.dropdown-menu.mega-dropdown-menu').on('click', function(event) {
          event.stopPropagation();
      });
      
      $('a.left').click(function () {
          $('#carousel').carousel('prev');
      });
      
      $('a.right').click(function () {
          $('#carousel').carousel('next');
      });
      
      $('ol.carousel-indicators li').click(function (event) {
          var index = $(this).data("slide-to");
          $('#carousel').carousel(index);
      });
      

      여기에 jsfiddle입니다.


    • 17.Angular2 부트 스트랩으로, 당신은 대부분의 시나리오에 대한 nonInput을 사용할 수 있습니다 :

      Angular2 부트 스트랩으로, 당신은 대부분의 시나리오에 대한 nonInput을 사용할 수 있습니다 :

      <div dropdown autoClose="nonInput">
      

      https://valor-software.com/ng2-bootstrap/#/dropdowns


    • 18.나는이 질문 jQuery를 위해 특별히이었다 알고 있지만이 문제가 AngularJS와를 사용하는 사람이 당신이 지시를 만들 수 있습니다에 대한 처리하는이 :

      나는이 질문 jQuery를 위해 특별히이었다 알고 있지만이 문제가 AngularJS와를 사용하는 사람이 당신이 지시를 만들 수 있습니다에 대한 처리하는이 :

      angular.module('app').directive('dropdownPreventClose', function() {
          return {
              restrict: 'A',
              link: function(scope, element, attrs) {
                element.on('click', function(e) {
                  e.stopPropagation(); //prevent the default behavior of closing the dropdown-menu
                });
              }
          };
      });
      

      그런 다음 속성을 추가 드롭 다운-닫기 방지 가까이 메뉴를 트리거 귀하의 요소, 그리고 그것을 방지해야한다. 나를 위해, 자동으로 메뉴를 폐쇄하는 선택 요소가 있었다 :

      <div class="dropdown-menu">
        <select dropdown-prevent-close name="myInput" id="myInput" ng-model="myModel">
          <option value="">Select Me</option>
        </select>
      </div>
      

    • 19.[부트 스트랩 4 알파 6] [레일] 레일 개발자를 들어, e.stopPropagation () 데이터 방법 LINK_TO 바람직하지 못한 행동으로 이어질 것입니다하지 얻기 위해 동일 GET으로는 것이다 기본 반환 모든 귀하의 요청입니다.

      [부트 스트랩 4 알파 6] [레일] 레일 개발자를 들어, e.stopPropagation () 데이터 방법 LINK_TO 바람직하지 못한 행동으로 이어질 것입니다하지 얻기 위해 동일 GET으로는 것이다 기본 반환 모든 귀하의 요청입니다.

      이 문제를 해결하기 위해, 나는 보편이 솔루션을 제안

      $('.dropdown .dropdown-menu').on('click.bs.dropdown', function() {
        return $('.dropdown').one('hide.bs.dropdown', function() {
          return false;
        });
      });
      

      $ ( '. .dropdown 드롭 다운 메뉴'). ( 'click.bs.dropdown'기능에 () { $를 반환 ( '. 드롭 다운'). 하나 ( 'hide.bs.dropdown'기능을 () { false를 반환; }); }); <링크 확인해 = "스타일 시트"HREF = "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css"무결성 = "SHA384 - rwoIResjU2yc3z8GV / NPeZWAv56rSmLldC3R / AZzGRnGxQQKnKkoFVhFQhNUwEyJ"crossorigin = "익명"> <스크립트 SRC = "https://code.jquery.com/jquery-3.1.1.slim.min.js"무결성 = "SHA384 - A7FZj7v + D / sdmMqp / nOQwliLvUsJfDHW + k9Omg / A / EheAdgtzNs3hpfag6Ed950n"crossorigin = "익명 "> <스크립트 SRC = "https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js"무결성 = "SHA384 - DztdAPBWPRXSA / 3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb"crossorigin = "익명"> <스크립트 SRC = "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js"무결성 = "SHA384 - vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk + 02D9phzyeVkE + jo0ieGizqPLForn"crossorigin = "익명">

      • 메뉴 항목 1 <스팬 클래스 = "FA-FA 셰브론 풀다운 오른쪽">
        • <올 클래스 = "회전식 지시기"> <리 데이터 밀어서 = "0"데이터 타겟 = "# 컨베이어"> <리 클래스 = "활성"데이터 - 슬라이드 = "1"데이터 타겟 = "# 컨베이어">

        • 20.대신 일부 자바 스크립트 또는 JQuery와 코드를 작성하는 (바퀴를 재발 명). 위의 시나리오는 부트 스트랩 자동 닫기 옵션으로 관리 할 수 ​​있습니다. 당신도 자동 닫힘에 값을 제공 할 수 있습니다 :

          대신 일부 자바 스크립트 또는 JQuery와 코드를 작성하는 (바퀴를 재발 명). 위의 시나리오는 부트 스트랩 자동 닫기 옵션으로 관리 할 수 ​​있습니다. 당신도 자동 닫힘에 값을 제공 할 수 있습니다 :

          다음 plunker를 살펴 보자 :

          http://plnkr.co/edit/gnU8M2fqlE0GscUQtCWa?p=preview

          세트

          uib-dropdown auto-close="disabled" 
          

          도움이 되었기를 바랍니다 :)


        • 21.나는 이미 양식을 사용하도록 제안 이전의 대답은하지만, 제공되는 마크 업이 올바른지 /에 적합하지 알고있다. 여기에 가장 쉬운 솔루션, 전혀 필요하지 자바 스크립트 그리고 그것은 당신의 드롭 다운을 중단하지 않습니다. 부트 스트랩 4 작동합니다.

          나는 이미 양식을 사용하도록 제안 이전의 대답은하지만, 제공되는 마크 업이 올바른지 /에 적합하지 알고있다. 여기에 가장 쉬운 솔루션, 전혀 필요하지 자바 스크립트 그리고 그것은 당신의 드롭 다운을 중단하지 않습니다. 부트 스트랩 4 작동합니다.

          <폼 클래스 = "드롭 다운 항목">


        • 22.이것은 나에게 도움이

          이것은 나에게 도움이

          $('.dropdown-menu').on('click', function (e) {
               if ($(this).parent().is(".open")) {
                   var target = $(e.target);
                   if (target.hasClass("keepopen") || target.parents(".keepopen").length){
                              return false; 
                          }else{
                              return true;
                          }
                      }            
          });
          

          메뉴 요소의 요구 아래로 강하는 클래스 메뉴 드롭 다운 및 keepopen의 메모를 가지고 (이렇게 될 수 있습니다.

          <ul role="menu" class="dropdown-menu topmenu-menu eserv_top_notifications keepopen">
          

          위의 코드 방지 전체 구속 대신 클래스 드롭 다운 메뉴와 특정 소자.

          이 사람을 도움이되기를 바랍니다.

          감사.


        • 23.당신은 단순히 링크 자체의 클릭 이벤트에 event.stopPropagation를 실행할 수 있습니다. 이 같은.

          당신은 단순히 링크 자체의 클릭 이벤트에 event.stopPropagation를 실행할 수 있습니다. 이 같은.

              $(".dropdown-menu a").click((event) => {
                   event.stopPropagation()
                   let url = event.target.href
                   //Do something with the url or any other logic you wish
              })
          

          편집 : 사람이 답변을보고 사용하는 경우가 작동하지 않습니다, 반응한다. 다른 자바 스크립트 이벤트를 처리 반응하고 이벤트 핸들러가 호출되고 반응 시간에 의해, 이벤트는 이미 해고 및 전파되었습니다. 당신이 그런 식으로 수동으로 이벤트를 첨부해야 함을 극복하기 위해

          handleMenuClick(event) {
             event.stopPropagation()
             let menu_item = event.target
             //implement your logic here.
          }
          componentDidMount() {
              document.getElementsByClassName("dropdown-menu")[0].addEventListener(
                  "click", this.handleMenuClick.bind(this), false)
             }
          }
          

        • 24.나를 위해 간단한 작업 솔루션입니다 :

          나를 위해 간단한 작업 솔루션입니다 :

          $('.dropdown').on('click', function(e) {
              var target = $(e.target);
              var dropdown = target.closest('.dropdown');
              return !dropdown.hasClass('open') || !target.hasClass('keep-open');
          });
          

        • 25.나는 기본 부트 스트랩 탐색을 사용하여 원하는만큼 솔루션의 방법으로도 문제가 해결되지 발견했습니다. 다음은이 문제에 대한 내 솔루션입니다 :

          나는 기본 부트 스트랩 탐색을 사용하여 원하는만큼 솔루션의 방법으로도 문제가 해결되지 발견했습니다. 다음은이 문제에 대한 내 솔루션입니다 :

                 $(document).on('hide.bs.dropdown', function (e) {
                  if ($(e.currentTarget.activeElement).hasClass('dropdown-toggle')) {
                    $(e.relatedTarget).parent().removeClass('open');
                    return true;
                  }
                  return false;
                 });
          

        • 26..dropdown 내용에과 같이 모든 라벨에 .keep 오픈 클래스를 넣어 :

          .dropdown 내용에과 같이 모든 라벨에 .keep 오픈 클래스를 넣어 :

          $('.dropdown').on('click', function (e) {
              var target = $(e.target);
              var dropdown = target.closest('.dropdown');
              if (target.hasClass('keep-open')) {
                  $(dropdown).addClass('keep-open');
              } else {
                  $(dropdown).removeClass('keep-open');
              }
          });
          
          $(document).on('hide.bs.dropdown', function (e) {
              var target = $(e.target);
              if ($(target).is('.keep-open')) {
                  return false
              }
          });
          

          이전의 경우는 컨테이너 개체에 관련된 이벤트, 이제 컨테이너 상속을 피할 클래스 킵 오픈 폐쇄되기 전에 체크.


        • 27.나는이 함께했다 :

          나는이 함께했다 :

          $(element).on({
              'mouseenter': function(event) {
                  $(event.currentTarget).data('mouseover', true);
              },
              'mouseleave': function(event) {
                  $(event.currentTarget).data('mouseover', false);
              },
              'hide.bs.dropdown': function (event) {
                  return !$(event.currentTarget).data('mouseover');
              }
          });
          

        • 28.

          $(function() {
              $('.mega-dropdown').on('hide.bs.dropdown', function(e) {
                  var $target = $(e.target);
                  return !($target.hasClass("keep-open") || $target.parents(".keep-open").size() > 0);
              });
          
              $('.mega-dropdown > ul.dropdown-menu').on('mouseenter', function() {
                  $(this).parent('li').addClass('keep-open')
              }).on('mouseleave', function() {
                  $(this).parent('li').removeClass('keep-open')
              });
          });
          

        • 29.클릭 이벤트가 부트 스트랩 드롭 다운 외부 트리거 된 경우에만 드롭 다운을 닫는 경우, 이것은 나를 위해 일한 것입니다 :

          클릭 이벤트가 부트 스트랩 드롭 다운 외부 트리거 된 경우에만 드롭 다운을 닫는 경우, 이것은 나를 위해 일한 것입니다 :

          JS 파일 :

              $('.createNewElement').on('click.bs.dropdown.data-api', '.tags-btn-group.keep-open-dropdown', function (e) {
                  var target = $(e.target);
                  if (target.hasClass("dropdown-menu") || target.parents(".dropdown-menu").length) {
                      e.stopPropagation();
                  }
              });
          

          HTML 파일 :

          <!-- button: -->
          <div class="createNewElement">
                          <div class="btn-group tags-btn-group keep-open-dropdown">
          
                              <div class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false">OPEN DROPDOWN</div>
          
                              <ul class="dropdown-menu">
                                  WHAT EVER YOU WANT HERE...
                              </ul>
          
                          </div>
          </div>
          

        • 30.당신의 이벤트가 중단됩니다 때문에 반환 허위 또는 인 stopPropagation () 메소드를 사용하는 경우 몇 가지 문제가있을 수 있습니다. 이 작품 괜찮아요,이 코드를보십시오 :

          당신의 이벤트가 중단됩니다 때문에 반환 허위 또는 인 stopPropagation () 메소드를 사용하는 경우 몇 가지 문제가있을 수 있습니다. 이 작품 괜찮아요,이 코드를보십시오 :

          $(function() {
              $('.dropdown').on("click", function (e) {
                      $('.keep-open').removeClass("show");
              });
              $('.dropdown-toggle').on("click", function () {
                      $('.keep-open').addClass("show");
              });
          
              $( ".closeDropdown" ).click(function() {
                  $('.dropdown').closeDropdown();
              });
          });
          jQuery.fn.extend({
              closeDropdown: function() {
                  this.addClass('show')
                      .removeClass("keep-open")
                      .click()
                      .addClass("keep-open");
              }
            });
          

          HTML에서 :

          <div class="dropdown keep-open" id="search-menu" >
              <button  class="btn dropdown-toggle btn  btn-primary" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
              <i class="fa fa-filter fa-fw"></i> 
              </button>
              <div class="dropdown-menu">
                  <button class="dropdown-item" id="opt1" type="button">Option 1</button>
                  <button class="dropdown-item" id="opt2" type="button">Option 2</button>
                  <button type="button" class="btn btn-primary closeDropdown">Close</button>
              </div>
          </div>
          

          당신은 드롭 다운을 닫으려는 경우 :

          `$('#search-menu').closeDropdown();`
          

        from https://stackoverflow.com/questions/25089297/avoid-dropdown-menu-close-on-click-inside by cc-by-sa and MIT license