2016-07-25 99 views
0

我有一个内置复选框的下拉菜单。我想在用户点击外部时关闭下拉菜单。单击外部时隐藏下拉菜单

我的代码是:

<form> 
<div class="multiselect"> 
    <div class="selectBox" onclick="showCheckboxes()"> 
     <select> 
     </select> 
    </div> 
    <div class="checkboxes" id="checkboxes"> 
     @{ 
      if (ViewBag.DataActiveEmployee == null || ((IEnumerable<MvcApplication1.Models.ActiveUsersList>)ViewBag.DataActiveEmployee).Count() == 0) 
      { 
       //@:<h3>No records were processed.</h3> 

      } 
      else 
      { 
       foreach (var usr in ViewBag.DataActiveEmployee) 
       {     
         <label id="userName">@usr.EmployeeName</label>  
         <input class="checked" type="checkbox" name="search_emp" id="search_emp" [email protected]> 
       @: 
     } 
      } 
     } 

    </div> 
</div> 

JS

<script> 
var expanded = false; 
checkboxes.style.display = "none"; 
function showCheckboxes() { 
    var checkboxes = document.getElementById("checkboxes"); 
    if (!expanded) { 
     checkboxes.style.display = "block"; 
     expanded = true; 
    } else { 
     checkboxes.style.display = "none"; 
     expanded = false; 
    } 
} 

$('multiselect').click(function() { 
    $("#checkboxes").hide(); 
}); 

的问题是JavaScript的第二函数内,因为当我按下之外,什么都不是发生。

请帮忙。

+0

如果你把表格上onclick属性会发生什么? – brianlmerritt

回答

1

尝试使用event.target处理单击事件:

UPDATE

$(document).on('click', '.multiselect .selectBox', function(e) { 
 
    e.stopImmediatePropagation(); 
 
    $('#checkboxes').show(); 
 
}); 
 

 
$('body').on('click', function(e) { 
 
    if (e.target.id != 'checkboxes' && $(e.target).closest('#checkboxes').length == 0) { 
 
    $('#checkboxes').hide(); 
 
    } 
 
});
#checkboxes, 
 
.multiselect { 
 
    padding:15px; 
 
    border:1px solid #d8d8d8; 
 
} 
 

 
.selectBox { display: inline; } 
 

 
#checkboxes { display:none }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> 
 
<div class="multiselect"> 
 
    <div class="selectBox"> 
 
     <select> 
 
     </select> 
 
    </div> 
 
    <div class="checkboxes" id="checkboxes"> 
 
     <label id="userName">Employee 1</label>  
 
     <input class="checked" type="checkbox" name="search_emp" id="emp_1" value="val_1"> 
 
     <label id="userName">Employee 1</label>  
 
     <input class="checked" type="checkbox" name="search_emp" id="emp_1" value="val_1"> 
 
    </div> 
 
</div>

+0

我尝试了你的建议和不工作。其实我有这个错误** Uncaught ReferenceError:$未定义**我不明白为什么 – SomeAnonymousPerson

+0

是否在调用此函数时加载jQuery?此消息告诉您,代码无法识别$符号(jQuery别名) – kapantzak

+0

对,错误消失了。但行为是一样的 – SomeAnonymousPerson

0

检查DOM的目标是点击下拉本身或没有

$(document).on("click", function(event){ 
     var $trigger = $(".checkboxes"); 
     if($trigger !== event.target && !$trigger.has(event.target).length){ 
      $(".checkboxes").hide(); 
     }    
    }); 

它应该工作。