如何使自动完成输入字段下拉列表
我有一个输入字段,当用户单击它并开始键入时,我需要下拉以显示以显示以键入内容开头的所有下拉选项。我已经拥有大多数功能,我只是无法弄清楚如何使其通过数组过滤并仅显示相关选项。
const ampInput = document.querySelector('.amp-input');
const ampDropdown = document.querySelector('.amp-dropdown-container');
const ampOptions = document.querySelectorAll('.amp-options');
ampInput.addEventListener('click', () => {
ampDropdown.classList.add('amp-dropdown-container--active')
})
ampInput.addEventListener('focusout', (event) => {
ampDropdown.classList.remove('amp-dropdown-container--active')
});
ampInput.addEventListener('input', onInputChange)
function onInputChange() {
const value = ampInput.value.toLowerCase();
const filteredOptions = [];
ampOptions.forEach((option) => {
if (option.innerHTML.substr(0, value.length) === value)
filteredOptions.push(option);
});
// console.log(filteredNames)
}
<form action="{{ routes.search_url }}" method="get" role="search" autocomplete="off">
<ul>
<li id="autocomplete-wrapper">
<input
id="autocomplete-input"
type="search"
placeholder="Amp Hours (aH)"
class="amp-input">
<ul class="amp-dropdown-container">
<h5 class="volt-options-title">Top Searches</h5>
<li><div class="amp-options">1.3</div></li>
<li><div class="amp-options">2.2</div></li>
<li><div class="amp-options">3.4</div></li>
<li><div class="amp-options">4.5</div></li>
<li><div class="amp-options">5</div></li>
<li><div class="amp-options">7</div></li>
<li><div class="amp-options">8</div></li>
<li><div class="amp-options">8.5</div></li>
<li><div class="amp-options">9</div></li>
<li><div class="amp-options">10</div></li>
<li><div class="amp-options">12</div></li>
<li><div class="amp-options">14</div></li>
<li><div class="amp-options">18</div></li>
<li><div class="amp-options">20</div></li>
<li><div class="amp-options">22</div></li>
<li><div class="amp-options">26</div></li>
<li><div class="amp-options">32</div></li>
<li><div class="amp-options">33</div></li>
<li><div class="amp-options">35</div></li>
<li><div class="amp-options">50</div></li>
<li><div class="amp-options">55</div></li>
<li><div class="amp-options">70</div></li>
<li><div class="amp-options">75</div></li>
<li><div class="amp-options">100</div></li>
<li><div class="amp-options">110</div></li>
<li><div class="amp-options">120</div></li>
<li><div class="amp-options">155</div></li>
<li><div class="amp-options">170</div></li>
<li><div class="amp-options">200</div></li>
<li><div class="amp-options">220</div></li>
<li><div class="amp-options">250</div></li>
<li><div class="amp-options">270</div></li>
<li><div class="amp-options">300</div></li>
<li><div class="amp-options">325</div></li>
<li><div class="amp-options">330</div></li>
<li><div class="last-link">400</div></li>
</ul>
</li>
</ul>
</form>
I have an input field which when a user clicks into it and begins typing, i need a dropdown to show up which displays all the dropdown options that begin with what is being typed. I have most of the functionality already I just cant figure out how to get it to filter through the array and display only the relevant options.
const ampInput = document.querySelector('.amp-input');
const ampDropdown = document.querySelector('.amp-dropdown-container');
const ampOptions = document.querySelectorAll('.amp-options');
ampInput.addEventListener('click', () => {
ampDropdown.classList.add('amp-dropdown-container--active')
})
ampInput.addEventListener('focusout', (event) => {
ampDropdown.classList.remove('amp-dropdown-container--active')
});
ampInput.addEventListener('input', onInputChange)
function onInputChange() {
const value = ampInput.value.toLowerCase();
const filteredOptions = [];
ampOptions.forEach((option) => {
if (option.innerHTML.substr(0, value.length) === value)
filteredOptions.push(option);
});
// console.log(filteredNames)
}
<form action="{{ routes.search_url }}" method="get" role="search" autocomplete="off">
<ul>
<li id="autocomplete-wrapper">
<input
id="autocomplete-input"
type="search"
placeholder="Amp Hours (aH)"
class="amp-input">
<ul class="amp-dropdown-container">
<h5 class="volt-options-title">Top Searches</h5>
<li><div class="amp-options">1.3</div></li>
<li><div class="amp-options">2.2</div></li>
<li><div class="amp-options">3.4</div></li>
<li><div class="amp-options">4.5</div></li>
<li><div class="amp-options">5</div></li>
<li><div class="amp-options">7</div></li>
<li><div class="amp-options">8</div></li>
<li><div class="amp-options">8.5</div></li>
<li><div class="amp-options">9</div></li>
<li><div class="amp-options">10</div></li>
<li><div class="amp-options">12</div></li>
<li><div class="amp-options">14</div></li>
<li><div class="amp-options">18</div></li>
<li><div class="amp-options">20</div></li>
<li><div class="amp-options">22</div></li>
<li><div class="amp-options">26</div></li>
<li><div class="amp-options">32</div></li>
<li><div class="amp-options">33</div></li>
<li><div class="amp-options">35</div></li>
<li><div class="amp-options">50</div></li>
<li><div class="amp-options">55</div></li>
<li><div class="amp-options">70</div></li>
<li><div class="amp-options">75</div></li>
<li><div class="amp-options">100</div></li>
<li><div class="amp-options">110</div></li>
<li><div class="amp-options">120</div></li>
<li><div class="amp-options">155</div></li>
<li><div class="amp-options">170</div></li>
<li><div class="amp-options">200</div></li>
<li><div class="amp-options">220</div></li>
<li><div class="amp-options">250</div></li>
<li><div class="amp-options">270</div></li>
<li><div class="amp-options">300</div></li>
<li><div class="amp-options">325</div></li>
<li><div class="amp-options">330</div></li>
<li><div class="last-link">400</div></li>
</ul>
</li>
</ul>
</form>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以将一个空的
Datalist
元素与搜索输入相关联(我将其添加到HTML代码的底部)。请注意属性list =“建议”
添加到搜索输入中,该指示其填充数据库中的建议框。然后,在搜索输入更改时,您可以以
option
element elements的元素动态存储过滤后的结果,从而使搜索输入显示一个建议框。此更新(按OP的注释)直接在
&lt; ul&gt;
元素上处理过滤:You can associate an empty
datalist
element to to the search input (I added it on bottom of your html code). Note the attributelist="suggestions"
added to the search input, which instructs it to populate a suggestion box picking elements from the datalist.Then, on search input change, you can store your filtered results dynamically as
option
elements of the datalist, making the search input show a suggestion box.This update (per OP's comment) handles the filtering directly on the
<ul>
element: