【发布时间】:2017-04-23 19:14:09
【问题描述】:
下面是我正在使用的输入下拉菜单的简化版本。
它所做的基本总结是:如果您专注于输入,则会出现一个下拉菜单。如果您单击下拉列表中的选项之一,该选项将填充输入并且下拉列表消失。这是使用onfocus 和我称为dropdown(); 和undropdown(); 的函数实现的。
我处于两难境地,当有人点击其他地方时,我无法让下拉菜单消失。如果我使用onblur,它会成功隐藏下拉菜单,但如果您单击一个选项,它不会填充输入,这是因为onblur 函数首先运行,因此input(); 函数不会t 不运行,因为下拉菜单已被隐藏。
如果您将onclick 放在主体标签或其他父标签上,它会将onfocus 视为一次点击,在此运行dropdown(); 函数,然后立即运行undropdown(); 函数,因此下拉菜单从此不再出现功能重叠。
我希望能帮助我弄清楚如何对函数进行排序,以便它们以正确的顺序执行而不会相互重叠。
JSFiddle 可用here.
function input(pos) {
var dropdown = document.getElementsByClassName('drop');
var li = dropdown[0].getElementsByTagName("li");
document.getElementsByTagName('input')[0].value = li[pos].innerHTML;
undropdown(0);
}
function dropdown(pos) {
document.getElementsByClassName('content')[pos].style.display = "block"
}
function undropdown(pos) {
document.getElementsByClassName('content')[pos].style.display = "none";
}
.drop {
position: relative;
display: inline-block;
vertical-align: top;
overflow: visible;
}
.content {
display: none;
list-style-type: none;
border: 1px solid #000;
padding: 0;
margin: 0;
position: absolute;
z-index: 2;
width: 100%;
max-height: 190px;
overflow-y: scroll;
}
.content li {
padding: 12px 16px;
display: block;
margin: 0;
}
<div class="drop">
<input type="text" name="class" placeholder="Class" onfocus="dropdown(0)"/>
<ul class="content">
<li onclick="input(0)">Option 1</li>
<li onclick="input(1)">Option 2</li>
<li onclick="input(2)">Option 3</li>
<li onclick="input(3)">Option 4</li>
</ul>
</div>
PS:除了上述问题,我希望能提出修改建议,以便为这个问题获得一个更好的标题,以便遇到类似问题的人更容易找到它。
【问题讨论】:
-
可能有助于重现 www.jsfiddle.net 中的问题(更容易使用并提出解决方案) - 标题可能很好,通用性足以解决许多问题,但描述你的问题很漂亮准确。
-
您不能使用
<select>的任何特殊原因? -
通常你捕获点击(或传播到)文档元素并在必要时关闭下拉菜单。
标签: javascript html css input drop-down-menu