2017-06-14 69 views
1

我有這個菜單,我的問題是,我需要它的行爲,以便它只在點擊父菜單項時切換。現在你可以通過點擊身體上的某個地方關閉下拉菜單,這不是我想要的行爲。只有在點擊父菜單項時,下拉菜單纔會關閉。可能?怎麼樣?Bootstrap下拉防止切換身體點擊?

HTML:

<div class="navigation"> 
    <ul class="menu nav"> 
    <li class="first expanded dropdown"><span title="" class="active-trail dropdown-toggle nolink" data-target="#" data-toggle="dropdown">Ekonomiförvaltning <span class="caret"></span></span> 
     <ul class="dropdown-menu"> 
     <li class="first leaf"><a href="#" title="">Ekonomiförvaltning</a></li> 
     <li class="leaf"><a href="#" title="">Redovisningstjänster</a></li> 
     <li class="leaf"><a href="#" title="">Controller-tjänst</a></li> 
     <li class="leaf"><a href="#" title="">Disponenttjänster</a></li> 
     <li class="leaf"><a href="#" title="">Skatterådgivning &amp; lagtjänster</a></li> 
     <li class="last leaf"><a href="#" title="">Företagsförvärv</a></li> 
     </ul> 
    </li> 
    <li class="expanded dropdown"><span title="" data-target="#" class="dropdown-toggle nolink" data-toggle="dropdown">Lönehantering <span class="caret"></span></span> 
     <ul class="dropdown-menu"> 
     <li class="first leaf"><a href="#" title="">Lönehantering</a></li> 
     <li class="leaf"><a href="#" title="">Löneberäkning</a></li> 
     <li class="leaf"><a href="#" title="">HR-tjänster</a></li> 
     <li class="last leaf"><a href="#r" title="">Reseräkningar</a></li> 
     </ul> 
    </li> 
    <li class="last expanded dropdown"><span title="" data-target="#" class="dropdown-toggle nolink" data-toggle="dropdown">Programvaror <span class="caret"></span></span> 
     <ul class="dropdown-menu"> 
     <li class="first leaf"><a href="#" title="">Programvaror</a></li> 
     <li class="leaf"><a href="#" title="">Löneprogram</a></li> 
     <li class="leaf"><a href="#" title="">ERP-affärssystem</a></li> 
     <li class="last leaf"><a href="#" title="">Personaladministration</a></li> 
     </ul> 
    </li> 
    </ul> 
    </div> 

的Jquery:

$('.dropdown').on('show.bs.dropdown', function() { 
     $(this).find('.dropdown-menu').first().stop(true, true).slideDown(); 
     $(this).find('a.dropdown-toggle').removeAttr('data-toggle'); 
    }); 
    $('.dropdown').on('hide.bs.dropdown', function(){ 
     $(this).find('.dropdown-menu').first().stop(true, true).slideUp(); 
    }); 

See fiddle

回答

0

在文檔單擊而不是下拉元素時,您可以停止事件傳播:

$(document).on('click', ':not(.dropdown)', function(e) { 
 
    if ($(this).closest('.dropdown').length == 0) { 
 
     // 
 
     // if on doc and not on a dropdown.... 
 
     // 
 
     e.stopPropagation(); 
 
    } 
 
}); 
 

 

 

 

 
$('.dropdown').on('show.bs.dropdown', function() { 
 
    $(this).find('.dropdown-menu').first().stop(true, true).slideDown(); 
 
    $(this).find('a.dropdown-toggle').removeAttr('data-toggle'); 
 
}); 
 
$('.dropdown').on('hide.bs.dropdown', function(){ 
 
    $(this).find('.dropdown-menu').first().stop(true, true).slideUp(); 
 
});
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> 
 
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script> 
 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> 
 

 

 
<div class="navigation"> 
 
    <ul class="menu nav"> 
 
     <li class="first expanded dropdown"><span title="" class="active-trail dropdown-toggle nolink" data-target="#" data-toggle="dropdown">Ekonomiförvaltning <span class="caret"></span></span> 
 
      <ul class="dropdown-menu"> 
 
       <li class="first leaf"><a href="#" title="">Ekonomiförvaltning</a></li> 
 
       <li class="leaf"><a href="#" title="">Redovisningstjänster</a></li> 
 
       <li class="leaf"><a href="#" title="">Controller-tjänst</a></li> 
 
       <li class="leaf"><a href="#" title="">Disponenttjänster</a></li> 
 
       <li class="leaf"><a href="#" title="">Skatterådgivning &amp; lagtjänster</a></li> 
 
       <li class="last leaf"><a href="#" title="">Företagsförvärv</a></li> 
 
      </ul> 
 
     </li> 
 
     <li class="expanded dropdown"><span title="" data-target="#" class="dropdown-toggle nolink" data-toggle="dropdown">Lönehantering <span class="caret"></span></span> 
 
      <ul class="dropdown-menu"> 
 
       <li class="first leaf"><a href="#" title="">Lönehantering</a></li> 
 
       <li class="leaf"><a href="#" title="">Löneberäkning</a></li> 
 
       <li class="leaf"><a href="#" title="">HR-tjänster</a></li> 
 
       <li class="last leaf"><a href="#r" title="">Reseräkningar</a></li> 
 
      </ul> 
 
     </li> 
 
     <li class="last expanded dropdown"><span title="" data-target="#" class="dropdown-toggle nolink" data-toggle="dropdown">Programvaror <span class="caret"></span></span> 
 
      <ul class="dropdown-menu"> 
 
       <li class="first leaf"><a href="#" title="">Programvaror</a></li> 
 
       <li class="leaf"><a href="#" title="">Löneprogram</a></li> 
 
       <li class="leaf"><a href="#" title="">ERP-affärssystem</a></li> 
 
       <li class="last leaf"><a href="#" title="">Personaladministration</a></li> 
 
      </ul> 
 
     </li> 
 
    </ul> 
 
</div>

+0

謝謝!這完美的作品! – iamfredrik

+0

@iamfredrik不客氣 – gaetanoM

+0

這是干擾我的覆蓋,但更改$(this).closest()到$(e.target).closest()似乎已經工作。 – iamfredrik

0

你需要停下來什麼,當用戶點擊該文件被解僱。加入這樣的事情您的JS後:

$(document).on('click', function(e) { 
    $('.dropdown').find('.dropdown-menu').stop(); 
}); 
+0

它的工作原理,但並不完美。點擊文檔後需要點擊兩下鼠標才能關閉。看到更新的小提琴。 [鏈接](https://jsfiddle.net/jeamk5nf/1/) – iamfredrik

+0

你是對的,道歉。試試這個: '$(文件)。在( '點擊',功能(E){ \t \t如果($(E).hasClass( '下拉菜單,切換')){ \t \t \t \t $(! '.dropdown')。find('。dropdown-menu')stop(); } });'這將只允許您關閉下拉菜單時點擊.dropdown-toggle –

+0

我沒有注意到任何差異。點擊文檔後,關閉仍然需要點擊兩下,我不想要。更新小提琴:[鏈接](https://jsfiddle.net/o6vLmdzf/1/) – iamfredrik