我正试图在下拉列表中放入一个复选框表格:
<ul>
<li class="dropdown">
<a href="#" data-toggle="dropdown" class="dropdown-toggle">
Dropdown Form<b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><label class="checkbox"><input type="checkbox">Two</label></li>
<li><label class="checkbox"><input type="checkbox">Two</label></li>
</ul>
</li>
</ul>
但是,正如您在演示中所看到的,无论出于何种原因,实际的复选框本身都显示在下拉菜单之外。任何人都可以告诉我是什么原因造成的,以及应该如何实施?如果我拿出标签类它可以工作,但它们都已经完成了。
答案 0 :(得分:12)
从本质上讲,我们希望结合使用两组不同的Bootstrap控件和样式:Dropdowns和Checkboxes。在每个li
内,我们将使用label
而不是a
元素,以便我们可以wrap the checkbox in a label并使整个行可单击。
<ul class="dropdown-menu checkbox-menu allow-focus">
<li >
<label>
<input type="checkbox"> Cheese
</label>
</li>
</ul>
我们可以窃取通常应用于.dropdown-menu li a
的某些样式,输入并将其应用于我们的标签选项。我们将使标签占据容器的整个宽度,并解决一些标签/复选框对齐问题。此外,我们将为.active
和:hover
添加样式。
.checkbox-menu li label {
display: block;
padding: 3px 10px;
clear: both;
font-weight: normal;
line-height: 1.42857143;
color: #333;
white-space: nowrap;
margin:0;
transition: background-color .4s ease;
}
.checkbox-menu li input {
margin: 0px 5px;
top: 2px;
position: relative;
}
.checkbox-menu li.active label {
background-color: #cbcbff;
font-weight:bold;
}
.checkbox-menu li label:hover,
.checkbox-menu li label:focus {
background-color: #f5f5f5;
}
.checkbox-menu li.active label:hover,
.checkbox-menu li.active label:focus {
background-color: #b8b8ff;
}
其他一些内部管理,我们将在每个列表项上手动保留一个.active
类标志,以与是否选中该项相对应,以便我们对其进行适当的样式设置。
$(".checkbox-menu").on("change", "input[type='checkbox']", function() {
$(this).closest("li").toggleClass("active", this.checked);
});
我们还将希望通过阻止事件冒泡使菜单进入stay open on internal click events来允许多个选择
$(document).on('click', '.allow-focus', function (e) {
e.stopPropagation();
});
$(".checkbox-menu").on("change", "input[type='checkbox']", function() {
$(this).closest("li").toggleClass("active", this.checked);
});
$(document).on('click', '.allow-focus', function (e) {
e.stopPropagation();
});
body {
padding: 15px;
}
.checkbox-menu li label {
display: block;
padding: 3px 10px;
clear: both;
font-weight: normal;
line-height: 1.42857143;
color: #333;
white-space: nowrap;
margin:0;
transition: background-color .4s ease;
}
.checkbox-menu li input {
margin: 0px 5px;
top: 2px;
position: relative;
}
.checkbox-menu li.active label {
background-color: #cbcbff;
font-weight:bold;
}
.checkbox-menu li label:hover,
.checkbox-menu li label:focus {
background-color: #f5f5f5;
}
.checkbox-menu li.active label:hover,
.checkbox-menu li.active label:focus {
background-color: #b8b8ff;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.js"></script>
<div class="dropdown">
<button class="btn btn-default dropdown-toggle" type="button"
id="dropdownMenu1" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="true">
<i class="glyphicon glyphicon-cog"></i>
<span class="caret"></span>
</button>
<ul class="dropdown-menu checkbox-menu allow-focus" aria-labelledby="dropdownMenu1">
<li >
<label>
<input type="checkbox"> Cheese
</label>
</li>
<li >
<label>
<input type="checkbox"> Pepperoni
</label>
</li>
<li >
<label>
<input type="checkbox"> Peppers
</label>
</li>
</ul>
</div>
答案 1 :(得分:3)
Bootstrap在其文档中使用复选框的方式如下:
<div class="checkbox">
<label>
<input type="checkbox">Two
</label>
</div>
所以你的看起来像是:
<ul>
<li class="dropdown">
<a href="#" data-toggle="dropdown" class="dropdown-toggle">Dropdown Form<b class="caret"></b></a>
<ul class="dropdown-menu">
<li>
<div class="checkbox">
<label>
<input type="checkbox">Two
</label>
</div>
</li>
<li>
<div class="checkbox">
<label>
<input type="checkbox">Two
</label>
</div>
</li>
</ul>
</li>
</ul>
答案 2 :(得分:2)
我认为一个简单的解决方案是
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button"
id="sampleDropdownMenu" data-toggle="dropdown">
Dropdown
</button>
<div class="dropdown-menu">
<button class="dropdown-item" type="button">
<input type="checkbox">Action
</button>
<button class="dropdown-item" type="button">
<input type="checkbox">Action
</button>
<button class="dropdown-item" type="button">
<input type="checkbox">Action
</button>
</div>
</div>
答案 3 :(得分:1)
这里的问题是您的复选框正在设置样式(通过Bootstrap):
.checkbox input[type=checkbox]{
position: absolute;
margin-left: -20px;
}
这可能是为了避免那些&#34;聚合&#34;您在.checkbox
上删除<label>
课程时看到的问题,但在这种情况下,导致margin-left
出现问题。
通过对标记和CSS进行最小调整来解决此问题的一种方法就是在<label>
添加一些填充以解释它:
label.checkbox{
padding-left:20px;
}
这里有一个updated Bootply来向您展示代码的实际效果。希望这可以帮助!如果您有任何问题,请告诉我。
答案 4 :(得分:0)
由于列表很长,我非常喜欢@Kylemit的解决方案,并对其进行了一些修改。
只需将类pre-scrollable
添加到ul
中,列表就可以很好地滚动。