Twitter 부트 스트랩 드롭 다운을 숨기는 방법


93

이것은 성가신 일입니다. Bootstrap 드롭 다운에서 항목을 클릭해도 드롭 다운이 닫히지 않습니다. 드롭 다운 항목을 클릭 할 때 Facebox 라이트 박스를 열도록 설정했지만 문제가 있습니다.

여기에 이미지 설명 입력


내가 시도한 것

항목을 클릭하면 다음과 같이 시도했습니다.

    $('.dropdown.open').removeClass('open');
    $('.dropdown-menu').hide();

그것은 그것을 숨기지 만 어떤 이유로 다시 열리지 않을 것입니다.

보시다시피 드롭 다운이 열려있을 때 z-index엉망인 것처럼 보이기 때문에 닫아야합니다 (주로 드롭 다운이 Facebox 모달 상자 오버레이보다 높기 때문입니다.


Bootstrap의 내장 모달 상자를 사용하지 않는 이유

Bootstrap에 내장 된 멋진 모달 상자를 사용하지 않는 이유가 궁금하다면 다음과 같은 이유 때문입니다.

  1. AJAX로 콘텐츠를로드하는 방법이 없습니다.
  2. 모달에 대해 매번 HTML을 입력해야합니다. Facebox로 간단하게 할 수 있습니다 :$.facebox({ajax:'/assets/ajax/dialogs/dialog?type=block-user&id=1234567'});
  3. 애니메이션을 적용하기 위해 CSS3 애니메이션을 사용하지만 (매우 멋져 보입니다) CSS3가 아닌 브라우저에서는보기 만하면별로 좋지 않습니다. Facebox는 JavaScript를 사용하여 페이드 인하므로 모든 브라우저에서 작동합니다.

답변:


176

이 시도:

$('.dropdown.open .dropdown-toggle').dropdown('toggle');

이것은 또한 당신을 위해 일할 수 있습니다 :

$('[data-toggle="dropdown"]').parent().removeClass('open');

코드를 업데이트했습니다. 다시 시도해주세요. 나는 열린 드롭 다운에서 이것을 시도했고 잘 닫혔습니다. 나중에 다시 열 수도 있습니다.
Bart Wegrzyn 2012 년

3
나는 당신을 위해 일할 다른 방법을 추가했습니다. 그렇지 않은 경우 버튼을 보유하는 div.btn-group 요소에 "open"클래스가 할당되어 있는지 다시 확인하십시오.
Bart Wegrzyn 2012-06-09

9
.dropdown('toggle')드롭 다운을 닫지 만 다시 열지 못하도록합니다! 나는 그 용도가 무엇인지 모르겠습니다!
orad

2
.dropdown ( 'toggle')을 사용할 때 드롭 다운 내의 항목에 연결된 다른 클릭 처리기가 작동을 멈 춥니 다. 그러나 .parent (). removeClass ( 'open') 메서드를 사용할 때이 문제가 발생하지 않습니다.
Ben

7
주의 : open수업 제거는 작동하지만 업데이트되지 않습니다 aria-expanded. 가능하면 항상 API를 사용하는 것이 좋습니다.
claviska 2015 년

26

여기에서 대부분의 옵션을 시도했지만 실제로는 나를 위해 일하지 않았습니다. ( $('.dropdown.open').removeClass('open');숨겨졌지만 다른 것을 클릭하기 전에 마우스를 올려 놓으면 다시 나타납니다.

그래서 나는 그것을 whith $("body").trigger("click")


그것도 좋은 방법입니다! 를 가상으로 클릭 <body>하면 드롭 다운이 닫힙니다.
Nathan

4
예, 드롭 다운은 메뉴 외부의 사용자의 클릭 이벤트를 나열합니다. :)
VeXii 2013 년

1
@VeXii 예, 그것이 모바일 장치에서 자동으로 종료되지 않는 이유입니다. 새로운 부트 스트랩 버전 3 ( "모바일 우선")이이 문제를 해결하기를 바랍니다.
Mister Smith

1
결함없이 작동합니다.
Dovy

11
$('.open').removeClass('open');

Bootstrap 4 (2018 년 10 월) :

$('.show').removeClass('show');

Bootstrap 4에서는 'show'클래스를 사용한다는 점을 제외하면 이것이 정말 가장 간단한 해결책이라고 생각합니다.
Dagmar

6

당신은 할 필요가 $('.dropdown.open').removeClass('open');드롭 다운 메뉴를 숨 깁니다 두 번째 줄을 제거합니다.


2
그러나 이것은 aria-attribute를 변경하지 않습니다.
dude

5

이는 다음 과 같이 앵커 태그에 data-toggle = "dropdown" 속성을 추가하여 JavaScript 코드를 작성하지 않고도 수행 할 수 있습니다 .

<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
<div class="dropdown">
  <button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-expanded="true">
    Dropdown
    <span class="caret"></span>
  </button>
  <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu1">
    <li role="presentation"><a role="menuitem" tabindex="-1" href="#" data-toggle="dropdown">Action</a></li>
    <li role="presentation"><a role="menuitem" tabindex="-1" href="#" data-toggle="dropdown">Another action</a></li>
  </ul>
</div>


나에게 가장 간단하고 관련성이 높은 답변입니다. 잘 설명했습니다. 감사합니다
Simmoniz 2015

5

이것은 나를 위해 일한 것입니다.

$(this).closest(".dropdown").find(".dropdown-toggle").dropdown("toggle");

4

선택한 답변이 저에게 효과가 없었지만 최신 버전의 Bootstrap 때문이라고 생각합니다. 나는 이것을 작성했다.

$('.btn-navbar').addClass('collapsed');
$('.nav-collapse').removeClass('in').css('height', '0');

앞으로 다른 사람에게 도움이되기를 바랍니다.


답변 해주셔서 감사합니다. 나는 여전히 Bootstrap 2.2를 사용하고 있다고 생각합니다.
Nathan

4

이 시도!

.removeClass("open").trigger("hide.bs.dropdown").trigger("hidden.bs.dropdown");

또는

$(clicked_element).trigger("click");

그것은 항상 나를 위해 일합니다.


U 왕! 나에게 가장 좋은 것! Tnx!
Dudi

3

내 방법을 사용하는 이유는 사용자가 div를 벗어나면 하위 메뉴가 사라지기 전에 사용자에게 특정 지연을 허용하기 때문입니다. superfish 플러그인을 사용하는 것과 같습니다.

1) 첫 번째 다운로드 호버 인 텐트 자바 스크립트

여기에 링크 : 호버 의도 자바 스크립트

2) 다음은 실행할 코드입니다.

$(document).ready(function(){

        var config = {    
            over: showBootrapSubmenu,   
            timeout: 500,
            out: hideBootrapSubmenu  
        };

        function showBootrapSubmenu(){  
             $(this).addClass('open');
        }
        function hideBootrapSubmenu(){  
          $(this).removeClass('open');
            }

        //Hover intent for Submenus
        $(".dropdown").hoverIntent(config);

    });



1

Bootstrap Modal로 HTML을 열어보십시오.이 코드를 사용합니다.

$(function() {
     $('a[data-toggle=modal]').click(function(e) {
          e.preventDefault();
          var page = $(e.target).attr('href');
          var url = page.replace('#','');
          $(page).on('show', function () {
              $.ajax({
              url: "/path_to/"+url+".php/html/...",
              cache: false,
              success: function(obj){
                   $(page).css('z-index', '1999');
                   $(page).html(obj);
              }
              });
         })
     });
}); 

링크는 다음과 같습니다.

<a href="#my_page" data-toggle="modal">PAGE</a>

1

다음은 버튼 드롭 다운을 닫고 버튼을 토글하는 방법에 대한 솔루션입니다.

$(".btn-group.open", this)
    .trigger("click")
    .children("a.dropdown-toggle")
    .trigger("blur")

여기서 "this"는 버튼 그룹의 전역 컨테이너입니다.


1

부트 스트랩 4.1 :

$(".dropdown-link").closest(".dropdown-menu").removeClass('show');

0

이것은 나를 위해 일했으며 navbar와 여러 풀다운 메뉴가있었습니다.

$(document).ready(function () {
    $('a.dropdown-toggle').each(function(){
        $(this).on("click", function () {
            $('li.dropdown').each(function () {
                $(this).removeClass('open');
            });
        });
    });
});

0

가장 쉬운 방법은 다음과 같이 숨기기 레이블을 추가하는 것입니다.

<label class="hide_dropdown" display='hide'></label>

그런 다음 드롭 다운을 숨기고 싶을 때마다 다음을 호출합니다.

$(".hide_dropdown").trigger('click');

0

이것이 누구에게도 도움이 될지 모르겠지만 (이 질문이 아닌 내 경우에 너무 구체적 일 수 있음) 나를 위해 이것은 효과가 있습니다.

$('.input-group.open').removeClass('open');

0

클릭 후 :

// Hide mobile menu
$('.in,.open').removeClass('in open');
// Hide dropdown
$('.dropdown-menu').css('display','none');
setTimeout(function(){
    $('.dropdown-menu').css('display','');
},100);

0

앵커 태그에 class = "dropdown-toggle"을 사용하면 앵커 태그를 클릭하면 부트 스트랩 드롭 다운이 닫힙니다.


0

이 간단한 jQuery 트릭이 도움이 될 것입니다.

$(".dropdown li a").click(function(){
$(".dropdown").removeClass("open");
});

0

쉬운 방법 :

  $('.navbar-collapse a').click(function(){
    $('.navbar-toggle').trigger('click')
  })

0

현재 이벤트 핸들러에서이 코드를 사용할 수 있습니다.

$('.in,.open').removeClass('in open');

내 시나리오에서는 ajax 호출이 완료되었을 때 사용했습니다.

jQuery(document).on('click', ".woocommerce-mini-cart__buttons .wc-forward.checkout", function() {
    var _this = jQuery(this);
    ajax_call(_this.attr("data-ajax-href"), "checkout-detail");
    $('.in,.open').removeClass('in open');
    return false;
});

0

속성 별 선택은 느린 방법입니다. 열린 드롭 다운을 숨기는 가장 빠른 솔루션은 다음과 같습니다.

$(".dropdown-menu.show").parent().dropdown("toggle");

또는 .dropdown-menu가 다음 자식 요소가 아닌 경우 다음을 사용합니다 (가장 가까운 부모 드롭 다운 컨트롤 찾기).

$(".dropdown-menu.show").closest(".dropdown").dropdown("toggle");

0

돌이켜 보면 추가되었을 수 있지만 (이 기능은 Bootstrap 4.3.1에서도 문서화 되어 있지 않지만) 매개 변수로 간단히 호출 할 수 있습니다 . toggler 요소에서 호출해야합니다. 이렇게 :hide

$('.dropdown-toggle').dropdown('hide');
// or
$('[data-toggle="dropdown"]').dropdown('hide');

물론 이것은 show.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.