在外部单击时隐藏下拉菜单
Hide the drop down menu when clicking outside
我有一个下拉菜单,里面有复选框。我想在用户单击外部时关闭下拉列表。
我的代码是:
<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" value=@usr.EmployeeName>
@:
}
}
}
</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的第二个函数内部,因为当我按外部时,什么都没有发生。
请帮忙。
尝试使用event.target
处理点击事件:
更新
$(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>
检查dom上的目标点击是否是下拉菜单本身或不是
$(document).on("click", function(event){
var $trigger = $(".checkboxes");
if($trigger !== event.target && !$trigger.has(event.target).length){
$(".checkboxes").hide();
}
});
它应该起作用。
相关文章:
- 基于其他下拉菜单选择隐藏/显示下拉菜单
- 一系列下拉菜单,由jQuery提供支持,隐藏和显示,但不在Chrome中
- 单击下拉菜单隐藏其他下拉菜单
- 如何隐藏当前选定的选项,使其在打开下拉菜单时不显示
- 根据两个下拉菜单的选择设置隐藏值
- 隐藏在导航栏中的下拉菜单
- 如何根据下拉菜单选择隐藏/显示文本框
- 隐藏下拉菜单,单击菜单中的项目
- 如何隐藏下拉菜单,如果我点击身体任何元素
- 引导:隐藏下拉菜单时,移动和链接到父
- 当DOM元素被聚焦时隐藏下拉菜单
- 如何显示和隐藏下拉菜单
- 点击后隐藏下拉菜单,鼠标悬停后不显示
- 隐藏下拉菜单上的开始在手机上
- 隐藏下拉菜单当其他东西被点击时,除了下拉菜单本身
- 隐藏下拉菜单
- 当点击隐藏下拉菜单-引导
- 显示/隐藏下拉菜单
- 在外部单击时隐藏下拉菜单
- 如何在 html/javascript 中隐藏下拉菜单