我正在为select元素使用多选jquery插件。外部div(包含多选框)具有最大高度。如果我打开多选框,它将被切断,我必须向下滚动才能看到所有选项:
$('select').multipleSelect();
#outer {
max-height: 110px;
overflow: auto;
background-color: green;
color: white;
}
#select {
width: 200px;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/multiple-select/1.2.0/multiple-select.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/multiple-select/1.2.0/multiple-select.min.js"></script>
<div id="outer">
<p>
Below you find a multiple select box that should overflow the outer div.
</p>
<label for="select">Multiple select:</label>
<select id="select">
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
<option value="4">Four</option>
</select>
<p>
Scroll to the button when the select box is open.
</p>
<button>
Do nothing
</button>
</div>
如果我打开多选框,则所有选项都应该可见。所以选项应该溢出外部div。我怎样才能做到这一点?
如果我将div.ms-parent
的位置设置为fixed
我会在向下滚动之前获得所需的行为,因为选择框已修复且未与其他内容一起移动。
在这种情况下使用z-index
也不起作用。
答案 0 :(得分:3)
此插件上的container
选项实现了这一点。尝试启动这样的插件:
$('select').multipleSelect({
container: "body",
});
https://jsfiddle.net/8mdxuz1w/1/
然后,您需要限制下拉列表的宽度。
答案 1 :(得分:1)
我用JQ制作了一种oldschool解决方案(因为我不熟悉multipleselect()插件)
见这里&gt;的 jsfiddle 强>
代码:
$('select').multipleSelect();
var sTop = $('.ms-parent ').offset().top,
sHeight = $('.ms-parent ').height()
$('.ms-drop.bottom').css('top',sTop+sHeight)
CSS
.ms-drop {
position:fixed;
width:200px;
}
要让.ms-drop
离开它的容器,您需要将position:fixed
设置为它。然后用JQ我通过找到top
offset().top
及其高度.ms-parent
来计算它的top
位置。这两个组合会给出.ms-drop
ms-drop
位置
希望它有所帮助。
编辑:jsFiddle
如果你希望#outer
保持在同一位置而不是在绿色div(top
)内滚动时向下滚动,你应该添加一个滚动函数来计算滚动距离并扣除它来自ms-drop
的{{1}}位置,因此它将始终保持在该位置
所以你将拥有以下JQ:
$('select').multipleSelect();
var sTop = $('.ms-parent ').offset().top,
sHeight = $('.ms-parent ').height()
$('.ms-drop.bottom').css('top',sTop+sHeight)
$("#outer").on("scroll",function(){
var oScroll = $(this).scrollTop()
$('.ms-drop.bottom').css('top',sTop+sHeight-oScroll)
})