【发布时间】:2020-10-12 08:08:18
【问题描述】:
我正在研究一个可搜索的下拉菜单,这是我的代码:
function openSearchDropdown() {
document.getElementById("myDropdown").classList.toggle("show");
}
function closeSearchDropdown() {
document.getElementById("myDropdown").classList.toggle("show");
}
function selectFilteredValue() {
document.getElementById("search_input").value = event.target.getAttribute("data-value");
closeSearchDropdown();
}
function filterSearchDropdown() {
var input, filter, ul, li, span, i;
input = document.getElementById("search_value");
filter = input.value.toUpperCase();
div = document.getElementById("myDropdown");
span = div.getElementsByTagName("span");
for (i = 0; i < span.length; i++) {
txtValue = span[i].textContent || span[i].innerText;
if (txtValue.toUpperCase().indexOf(filter) > -1) {
span[i].style.display = "";
} else {
span[i].style.display = "none";
}
}
}
.dropdown .search-area {
box-sizing: border-box;
background-image: url("searchicon.png");
background-position: 14px 12px;
background-repeat: no-repeat;
font-size: 16px;
padding-top:5px;
border: none;
border-bottom: 1px solid #ddd;
}
.dropdown .search-area:focus {
outline: 3px solid #ddd;
}
.dropdown {
position: relative;
display: inline-block;
left:35px;
}
.dropdown-content {
display: none;
position: absolute;
overflow: auto;
border: 1px solid #ddd;
z-index: 1;
}
.dropdown-content span {
color: black;
padding-top:5px;
text-decoration: none;
display: block;
}
.dropdown span:hover {
background-color: #ddd;
}
.show {
display: block;
}
input#search_input {
min-width: 191px;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
<div class="dropdown">
<input onclick="openSearchDropdown()" id="search_input" />
<div id="myDropdown" class="dropdown-content">
<input type="text" placeholder="Search.." id="search_value" onkeyup="filterSearchDropdown()" class="search-area" />
<span data-value="Bangkok" onclick="selectFilteredValue()">Bangkok</span>
<span data-value="Hong_Kong" onclick="selectFilteredValue()">Hong_Kong</span>
<span data-value="Jakarta" onclick="selectFilteredValue()">Jakarta</span>
<span data-value="Delhi" onclick="selectFilteredValue()">Delhi</span>
<span data-value="Karachi" onclick="selectFilteredValue()">Karachi</span>
<span data-value="Sydney" onclick="selectFilteredValue()">Sydney</span>
</div>
</div>
</body>
</html>
这很好用。我只需要在列表打开时添加一个滚动条和一个向下箭头。我需要这样的。
任何帮助或建议将不胜感激。
【问题讨论】:
-
你有 CSS 吗?
-
@evolutionxbox 是的,我已在问题中附加了 CSS
-
确实不需要链接到 Fiddle,只需在编辑帖子时将代码放入 Stack Snippet(
<>按钮)即可。 -
谢谢@ScottMarcus,下次我会这样做
标签: javascript css css-selectors dropdown html-select