Необходимо решить два вопроса.
Вот мой Jsfiddle:
http://jsfiddle.net/awaises/5FfgZ/
Поток - это мой код.
HTML
<div class="check_dropdown">
<input type="checkbox"> <a href="#" class="menu_item">Menu Item</a>
<ul class="leads_menu">
<li><a href="#">Sub Menu</a></li>
<li><a href="#">Sub Menu</a></li>
<li><a href="#">Sub Menu</a></li>
<li><a href="#">Sub Menu</a></li>
</ul>
</div>
CSS
.check_dropdown{
background:#edecec;
padding:2px;
display:inline-block;
}
.leads_menu {
display: none;
position:absolute;
color: #000;
cursor:pointer;
background:#edecec;
}
jQuery
$(function() {
$(".check_dropdown").each(function() {
if ($(this).find(".menu_item").length > 0) {
$(this).mousedown(function() {
$(this).find(".leads_menu").stop(true, true).slideToggle();
});
}
});
});
Я обновил вашу скрипку (нажмите здесь), чтобы проверить следующее:
Изменения находятся на уровне JS: http://jsfiddle.net/5FfgZ/3/
$(function() {
var menuClicked = false; //Check if user opened the dropdown
$(document).on('click', function(){
if(menuClicked){
menuClicked = false;
return;
}
if($(".leads_menu").css('display') != 'none'){
$(".leads_menu").stop(true, true).slideToggle();
}
});
$(".check_dropdown").each(function(e) {
if ($(this).find(".menu_item").length > 0) {
$(this).mousedown(function(e) {
if($(e.target).attr('type') == 'checkbox') return; //Check if element clicked is a checkbox.
$(this).find(".leads_menu").stop(true, true).slideToggle();
menuClicked = true;
});
}
});
});
Вы должны привязать событие к документу или окну, чтобы поймать следующий щелчок /mousedown вне раскрывающегося списка, чтобы закрыть его. jquery дает вам простой метод для этого
$(window).one('mousedown', function() { ... });
Я изменил вашу скрипку, чтобы вы могли ее посмотреть. также вы должны предотвратить распространение события mousedown. в противном случае он перейдет к вашему оконному объекту и вызовет односвязный метод.
Возможно, вы хотите
$(document).click(function(){
$(".leads_menu").hide();
});
$(".menu_item").click(function(e){
e.stopPropagation();
});
Я обновил вашу скрипку рабочим решением
<ul class="check_dropdown">
<li>
<input type="checkbox"> <a href="#" class="menu_item">Menu Item</a>
<ul class="leads_menu">
<li><a href="#">Sub Menu</a></li>
<li><a href="#">Sub Menu</a></li>
<li><a href="#">Sub Menu</a></li>
<li><a href="#">Sub Menu</a></li>
</ul>
</li>
<li>
<input type="checkbox"> <a href="#" class="menu_item">Menu Item</a>
<ul class="leads_menu">
<li><a href="#">Sub Menu</a></li>
<li><a href="#">Sub Menu</a></li>
</ul>
</li>
</ul>
$(function() {
$(".menu_item").click(function(e) {
$(this).siblings('.leads_menu').stop(true, true).slideToggle();
e.preventDefault();
});
});