微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Search Dropdown Javascript - 如何隐藏列表?

如何解决Search Dropdown Javascript - 如何隐藏列表?

我是 Javascript/HTML/CSS 的初学者。所以如果我遗漏了一些明显的东西,我很抱歉。

我的任务:我想在我的网站(图片网站)上创建一个搜索栏。使用此搜索栏,用户应该能够搜索我将在列表中确定的“关键字”。我列表中的每一项都应该将用户引导到一个新的 html 站点

我的问题:我创建的列表在搜索输入下可见。但我想首先隐藏列表,只显示用户搜索栏中输入的建议或匹配项。但是,如果我在 css 中隐藏列表,当输入中输入某些内容时,它显然也不会显示匹配项。我在底部包含了代码和屏幕截图。谢谢!

<input type="text" id="myInput" onkeyup="myFunction()" placeholder="Search for Topic.." title="Type in a name">
    
    <ul id="myUL">
      <li><a href="shuffle4.html">School</a></li>
      <li><a href="shuffle4.html">Sport</a></li>
      <li><a href="shuffle4.html">Tennis</a></li>
      <li><a href="shuffle4.html">Work</a></li>
      <li><a href="shuffle4.html">Funny</a></li>
      <li><a href="shuffle4.html">Money</a></li>
      <li><a href="shuffle4.html">Food</a></li>
    </ul>
    
    <script>
    function myFunction() {
        var input,filter,ul,li,a,i,txtValue;
        input = document.getElementById("myInput");
        filter = input.value.toupperCase();
        ul = document.getElementById("myUL");
        li = ul.getElementsByTagName("li");
        for (i = 0; i < li.length; i++) {
            a = li[i].getElementsByTagName("a")[0];
            txtValue = a.textContent || a.innerText;
            if (txtValue.toupperCase().indexOf(filter) > -1) {
                li[i].style.display = "";
            } else {
                li[i].style.display = "none";
            }
        }
    }
    </script>

截图: 我的列表中的所有建议都显示出来了,如果输入中没有输入任何内容,我该如何隐藏它们?

解决方法

你可以使用你在<li>中已经使用过的相同想法,使用display: none隐藏元素,然后在每次调用myFunction()时,检查{的内容{1}} 并相应地编辑 <input> 样式:

<ul>

// If we've got more than 1 char in <input>,show it,otherwise,hide
const inputDisplay = input.value.length > 1 ? 'block' : 'none';
ul.style.display = inputDisplay;
function myFunction() {
var input,filter,ul,li,a,i,txtValue;
input = document.getElementById("myInput");
filter = input.value.toUpperCase();
ul = document.getElementById("myUL");
li = ul.getElementsByTagName("li");

// If we've got more than 1 char in <input>,hide
const inputDisplay = input.value.length > 1 ? 'block' : 'none';
ul.style.display = inputDisplay;

for (i = 0; i < li.length; i++) {
    a = li[i].getElementsByTagName("a")[0];
    txtValue = a.textContent || a.innerText;
    if (txtValue.toUpperCase().indexOf(filter) > -1) {
        li[i].style.display = "";
    } else {
        li[i].style.display = "none";
    }
}
}
ul { display: none; }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。