如何解决在可搜索的下拉列表中添加滚动条和向下箭头
我正在研究可搜索的下拉列表,这是我的代码:
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>
这很好。打开列表时,我只需要添加滚动条和向下箭头。我需要这样。
任何帮助或建议将不胜感激。
解决方法
我认为这个问题与javascript无关。您需要做的是将固定的max-height
CSS属性设置为#myDropdown
元素,当呈现过多元素时,这将导致溢出。当您拥有overflow: auto
时,它将提示该div中的滚动条。怎么修改呢?借助CSS,您也可以了解here和here
如果下拉菜单的高度小于所有可用选项的高度,则会自动出现一个下拉菜单。这是必需的CSS,下面包含一个代码段,因此您可以看到它的外观。
/* change 5 to the number of items you want to show at start of dropdown */
/* 1em = font height,8px from outline + padding*/
/* max-height and not height for when search has less results */
#myDropdown {
max-height: calc(4 * (1em + 8px));
}
/* rest of your css */
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";
}
}
}
/* change 5 to the number of items you want to show at start of dropdown */
/* 1em = font height,8px from outline + padding*/
/* max-height and not height for when search has less results */
#myDropdown {
max-height: calc(4 * (1em + 8px));
}
/* rest of your css */
.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>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。