I have a Twitter Bootstrap dropdown menu. As all Twitter Bootstrap users know, the dropdown menu closes on click (even clicking inside it).
To avoid this, I can easily attach a click event handler on the dropdown menu and simply add the famous event.stopPropagation()
.
<ul class="nav navbar-nav">
<li class="dropdown mega-dropdown">
<a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-list-alt"></i> Menu item 1
<span class="fa fa-chevron-down pull-right"></span>
</a>
<ul class="dropdown-menu mega-dropdown-menu">
<li>
<div id="carousel" class="carousel slide" data-ride="carousel">
<ol class="carousel-indicators">
<li data-slide-to="0" data-target="#carousel"></li>
<li class="active" data-slide-to="1" data-target="#carousel"></li>
</ol>
<div class="carousel-inner">
<div class="item">
<img alt="" class="img-rounded" src="img1.jpg">
</div>
<div class="item active">
<img alt="" class="img-rounded" src="img2.jpg">
</div>
</div>
<a data-slide="prev" role="button" href="#carousel"
class="left carousel-control">
<span class="glyphicon glyphicon-chevron-left"></span>
</a>
<a data-slide="next" role="button" href="#carousel"
class="right carousel-control">
<span class="glyphicon glyphicon-chevron-right"></span>
</a>
</div>
</li>
</ul>
</li>
</ul>
This looks easy and a very common behavior, however, and since carousel-controls
(as well as carousel indicators
) event handlers are delegated to the document
object, the click
event on these elements (prev/next controls, ...) will be “ignored”.
$('ul.dropdown-menu.mega-dropdown-menu').on('click', function(event){
// The event won't be propagated up to the document NODE and
// therefore delegated events won't be fired
event.stopPropagation();
});
Relying on Twitter Bootstrap dropdown hide
/hidden
events is not a solution for the following reasons:
flag
class or attribute is not possibleThis fiddle is the normal behavior and this fiddle is with event.stopPropagation()
added.
Thanks to Roman for his answer. I also found an answer that you can find below.
This question is related to
javascript
jquery
html
twitter-bootstrap-3
drop-down-menu
This might help:
$("dropdownmenuname").click(function(e){
e.stopPropagation();
})
You may have some problems if you use return false or stopPropagation() method because your events will be interrupted. Try this code, it's works fine:
$(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");
}
});
In 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>
If you want to close the dropdrown:
`$('#search-menu').closeDropdown();`
Bootstrap provides the following function:
| 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.
Therefore, implementing this function should be able to disable the dropdown from closing.
$('#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;
}
});
The simplest working solution for me is:
keep-open
class to elements that should not cause dropdown closing$('.dropdown').on('click', function(e) {
var target = $(e.target);
var dropdown = target.closest('.dropdown');
return !dropdown.hasClass('open') || !target.hasClass('keep-open');
});
This should help as well
$(document).on('click', 'someyourContainer .dropdown-menu', function (e) {
e.stopPropagation();
});
This helped me,
$('.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;
}
}
});
Your drop down menu element needs to be like this, (take a note of the classes dropdown-menu
and keepopen
.
<ul role="menu" class="dropdown-menu topmenu-menu eserv_top_notifications keepopen">
The above code prevents biding on the whole <body>
, instead to the specfic element with the class dropdown-menu
.
Hope this helps someone.
Thanks.
In .dropdown
content put the .keep-open
class on any label like so:
$('.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
}
});
The previous cases avoided the events related to the container objects, now the container inherits the class keep-open and check before being closed.
I did it with this:
$(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');
}
});
I know this question was specifically for jQuery, but for anyone using AngularJS that has this problem you can create a directive that handles this:
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
});
}
};
});
Then just add the attribute dropdown-prevent-close
to your element that is triggering the menu to close, and it should prevent it. For me, it was a select
element that automatically closed the menu:
<div class="dropdown-menu">
<select dropdown-prevent-close name="myInput" id="myInput" ng-model="myModel">
<option value="">Select Me</option>
</select>
</div>
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>
Demo:
Generic: https://jsfiddle.net/kerryjohnson/omefq68b/1/
Your demo with this solution: http://jsfiddle.net/kerryjohnson/80oLdtbf/101/
I also found a solution.
Assuming that the Twitter Bootstrap Components
related events handlers are delegated to the document
object, I loop the attached handlers and check if the current clicked element (or one of its parents) is concerned by a delegated event.
$('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
});
Hope it helps any one looking for a similar solution.
Thank you all for your help.
With Angular2 Bootstrap, you can use nonInput for most scenarios:
<div dropdown autoClose="nonInput">
nonInput - (default) automatically closes the dropdown when any of its elements is clicked — as long as the clicked element is not an input or a textarea.
You can stop click on the dropdown from propagating and then manually reimplement the carousel controls using carousel javascript methods.
$('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);
});
Here is the jsfiddle.
$('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');
});
i have updated it once again to be the smartest and functional as possible. it now close when you hover outside the nav, remaining open while you are inside it. simply perfect.
Instead of writing some javascript or jquery code(reinventing the wheel). The above scenario can be managed by bootstrap auto-close option. You can provide either of the values to auto-close:
always - (Default) automatically closes the dropdown when any of its elements is clicked.
outsideClick - closes the dropdown automatically only when the user clicks any element outside the dropdown.
disabled - disables the auto close
Take a look at the following plunkr :
http://plnkr.co/edit/gnU8M2fqlE0GscUQtCWa?p=preview
Set
uib-dropdown auto-close="disabled"
Hope this helps :)
$('body').on("click", ".dropdown-menu", function (e) {
$(this).parent().is(".show") && e.stopPropagation();
});
I've found none of the solutions worked as I would like using default bootstrap nav. Here is my solution to this problem:
$(document).on('hide.bs.dropdown', function (e) {
if ($(e.currentTarget.activeElement).hasClass('dropdown-toggle')) {
$(e.relatedTarget).parent().removeClass('open');
return true;
}
return false;
});
You can also use form
tag. Example:
<div class="dropdown-menu">
<form>
Anything inside this wont close the dropdown!
<button class="btn btn-primary" type="button" value="Click me!"/>
</form>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Clik this and the dropdown will be closed</a>
<a class="dropdown-item" href="#">This too</a>
</div>
Source: https://getbootstrap.com/docs/5.0/components/dropdowns/#forms
I modified @Vartan's answer to make it work with Bootstrap 4.3. His solution doesn't work anymore with the latest version as target
property always returns dropdown's root div
no matter where the click was placed.
Here is the code:
$('.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>
You need to add "hold-on-click" to "dropdown-menu" class
You could simply execute event.stopPropagation
on click event of the links themselves.
Something like this.
$(".dropdown-menu a").click((event) => {
event.stopPropagation()
let url = event.target.href
//Do something with the url or any other logic you wish
})
Edit: If someone saw this answer and is using react, it will not work. React handle the javascript events differently and by the time your react event handler is being called, the event has already been fired and propagated. To overcome that you should attach the event manually like that
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)
}
}
For closing the dropdown only if a click event was triggered outside the bootstrap dropdown, this is what worked for me:
JS file:
$('.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 file:
<!-- 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>
In Bootstrap 4 you can also do this:
$('#dd-link').on('hide.bs.dropdown', onListHide)
function onListHide(e)
{
if(e.clickEvent && $.contains(e.relatedTarget.parentNode, e.clickEvent.target)) {
e.preventDefault()
}
}
where #dd-link
is the anchor element or button that has the data-toggle="drowndown"
property.
$(function() {
var closeble = false;
$('body').on('click', function (e) {
if (!$(event.target).is("a.dropdown-toggle")) {
closeble = false;
}
});
$('.dropdown').on({
"click": function(event) {
if ($(event.target).closest('.dropdown-toggle').length) {
closeble = true;
} else {
closeble = false;
}
},
"hide.bs.dropdown": function() {
return closeble;
}
});
});
I tried this simple thing and it worked like a charm.
I changed the dropdown-menu element from <div>
to <form>
and it worked well.
<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>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>_x000D_
_x000D_
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>_x000D_
_x000D_
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>_x000D_
_x000D_
_x000D_
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet"/>_x000D_
_x000D_
_x000D_
<div class="nav-item dropdown" >_x000D_
<a href="javascript:;" class="nav-link dropdown-toggle" data-toggle="dropdown">_x000D_
Click to open dropdown_x000D_
</a>_x000D_
<form class="dropdown-menu ">_x000D_
<ul class="list-group text-black">_x000D_
<li class="list-group-item" >_x000D_
List Item 1_x000D_
</li>_x000D_
<li class="list-group-item" >_x000D_
LI 2<input class="form-control" />_x000D_
</li>_x000D_
<li class="list-group-item" >_x000D_
List Item 3_x000D_
</li>_x000D_
</ul>_x000D_
</form>
_x000D_
[Bootstrap 4 Alpha 6][Rails]
For rails developer, e.stopPropagation()
will lead to undesirable behavior for link_to
with data-method
not equal to get
since it will by default return all your request as get
.
To remedy this problem, I suggest this solution, which is universal
$('.dropdown .dropdown-menu').on('click.bs.dropdown', function() {
return $('.dropdown').one('hide.bs.dropdown', function() {
return false;
});
});
$('.dropdown .dropdown-menu').on('click.bs.dropdown', function() {_x000D_
return $('.dropdown').one('hide.bs.dropdown', function() {_x000D_
return false;_x000D_
});_x000D_
});
_x000D_
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous">_x000D_
<script src="https://code.jquery.com/jquery-3.1.1.slim.min.js" integrity="sha384-A7FZj7v+d/sdmMqp/nOQwliLvUsJfDHW+k9Omg/a/EheAdgtzNs3hpfag6Ed950n" crossorigin="anonymous"></script>_x000D_
<script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" crossorigin="anonymous"></script>_x000D_
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script>_x000D_
_x000D_
<ul class="nav navbar-nav">_x000D_
<li class="dropdown mega-dropdown">_x000D_
<a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown">_x000D_
<i class="fa fa-list-alt"></i> Menu item 1_x000D_
<span class="fa fa-chevron-down pull-right"></span>_x000D_
</a>_x000D_
<ul class="dropdown-menu mega-dropdown-menu">_x000D_
<li>_x000D_
<div id="carousel" class="carousel slide" data-ride="carousel">_x000D_
<ol class="carousel-indicators">_x000D_
<li data-slide-to="0" data-target="#carousel"></li>_x000D_
<li class="active" data-slide-to="1" data-target="#carousel"></li>_x000D_
</ol>_x000D_
<div class="carousel-inner">_x000D_
<div class="item">_x000D_
<img alt="" class="img-rounded" src="img1.jpg">_x000D_
</div>_x000D_
<div class="item active">_x000D_
<img alt="" class="img-rounded" src="img2.jpg">_x000D_
</div>_x000D_
</div>_x000D_
<a data-slide="prev" role="button" href="#carousel" class="left carousel-control">_x000D_
<span class="glyphicon glyphicon-chevron-left"></span>_x000D_
</a>_x000D_
<a data-slide="next" role="button" href="#carousel" class="right carousel-control">_x000D_
<span class="glyphicon glyphicon-chevron-right"></span>_x000D_
</a>_x000D_
</div>_x000D_
</li>_x000D_
</ul>_x000D_
</li>_x000D_
</ul>
_x000D_
Bootstrap has solved this problem themselves in their support for <form>
tags in dropdowns. Their solution is quite graspable and you can read it here: https://github.com/twbs/bootstrap/blob/v4-dev/js/src/dropdown.js
It boils down to preventing propagation at the document element and doing so only for events of type 'click.bs.dropdown.data-api'
that match the selector '.dropdown .your-custom-class-for-keep-open-on-click-elements'
.
Or in code
$(document).on('click.bs.dropdown.data-api', '.dropdown .keep-open-on-click', (event) => {
event.stopPropagation();
});
The absolute best answer is to put a form tag after the class dropdown-menu
so your code is
<ul class="dropdown-menu">
<form>
<li>
<div class="menu-item">bla bla bla</div>
</li>
</form>
</ul>
Like for instance Bootstrap 4 Alpha has this Menu Event. Why not use?
// PREVENT INSIDE MEGA DROPDOWN
$('.dropdown-menu').on("click.bs.dropdown", function (e) {
e.stopPropagation();
e.preventDefault();
});
I know there already is a previous answer suggesting to use a form but the markup provided is not correct/ideal. Here's the easiest solution, no javascript needed at all and it doesn't break your dropdown. Works with Bootstrap 4.
<form class="dropdown-item">
<!-- Your elements go here -->
</form>
Bootstrap 4
$('.dropdown-menu[data-handledropdownclose="true"]').on("click.bs.dropdown", function (e) {
if ($(this).parent().hasClass("show")) {
var target = $(e.target);
if (!(target.hasClass("CloseDropDown") || target.parents(".CloseDropDown").length)) {
e.stopPropagation();
}
}
});
<div class="dropdown">
<button type="button" class="btn-no-border dropdown-toggle" data-toggle="dropdown">
<img src="~/Content/CSS/CssImages/Icons/usr_icon.png" alt="" title="language" class="float-right" />
</button>
<div class="dropdown-menu profile-menu-logout" data-handledropdownclose="true">
<div class="prof-name">
<i class="fa fa-user"></i> Hello World
</div>
<hr />
<div>
<a href="/Test/TestAction" class="CloseDropDown">
<i class="fa fa-briefcase"></i>
<span>Test Action</span>
</a>
</div>
<div>
<nav>
<ul class="nav-menu-prof padding-0">
<li class="menu-has-children">
<a href="#">
<span class="cyan-text-color">
Test 2
</span>
</a>
<ul id="ulList" class="padding-0 pad-left-25">
<li>
<a href="/Test/Test2" class="action currentmenu"> Test 1 </a>
<a href="/Test/Test2" class="action CloseDropDown"> Test 2 </a>
</li>
</ul>
</li>
</ul>
</nav>
</div>
<div>
<a href="/Account/Logout" class="cyan-text-color CloseDropDown">
<i class="fa fa-power-off"></i>
<span>Logout</span>
</a>
</div>
</div>
</div>
$(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')
});
});
You can go through the below code to solve this.
$(document).on('click.bs.dropdown.data-api', '.keep_it_open', function (e) {_x000D_
e.stopPropagation();_x000D_
});
_x000D_
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css" rel="stylesheet"/>_x000D_
<meta name="viewport" content="width=device-width, initial-scale=1">_x000D_
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>_x000D_
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">_x000D_
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>_x000D_
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>_x000D_
_x000D_
_x000D_
<div class="dropdown keep_it_open">_x000D_
<button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">Dropdown Example_x000D_
<span class="caret"></span></button>_x000D_
<ul class="dropdown-menu">_x000D_
<li><a href="#">HTML</a></li>_x000D_
<li><a href="#">CSS</a></li>_x000D_
<li><a href="#">JavaScript</a></li>_x000D_
</ul>_x000D_
</div>
_x000D_
I've got a similar problem recently and tried different ways to solve it with removing the data attribute data-toggle="dropdown"
and listening click
with event.stopPropagation()
calling.
The second way looks more preferable. Also Bootstrap developers use this way. In the source file I found initialization of the dropdown elements:
// 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);
So, this line:
.on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
suggests you can put a form
element inside the container with class .dropdown
to avoid closing the dropdown menu.
$('body').on("click", ".dropdown-menu", function (e) {
$(this).parent().is(".open") && e.stopPropagation();
});
This may work for any conditions.
$(document).click(function (event) {
$target = $(event.target);
if ($target.closest('#DivdropFilterListItemsCustomer').length == 1) {
$('#DivdropFilterListItemsCustomer').addClass('dropdown-menu show');
} else {
$('#DivdropFilterListItemsCustomer').removeClass('dropdown-menu
show').addClass('dropdown-menu');
}
});
DivdropFilterListItemsCustomer is id of drop down
[Show id and drop down ][1]
#A2ZCode
I just add onclick event like below to not close dropdown-menu.
<div class="dropdown-menu dropdown-menu-right" onclick="event.stopPropagation()" aria-labelledby="triggerId">
Source: Stackoverflow.com