Javascript 当清除搜索输入字段时,如何从搜索筛选器隐藏列表项?
我有如下HTML列表项:Javascript 当清除搜索输入字段时,如何从搜索筛选器隐藏列表项?,javascript,jquery,html,Javascript,Jquery,Html,我有如下HTML列表项: <ul id="fruits"> <li><a href="#">Mango</a></li> <li><a href="#">Apple</a></li> <li><a href="#">Grape</a></li> <li><a href="#">Cherry</a>&
<ul id="fruits">
<li><a href="#">Mango</a></li>
<li><a href="#">Apple</a></li>
<li><a href="#">Grape</a></li>
<li><a href="#">Cherry</a></li>
</ul>
当用户开始在input
字段中搜索水果名称时,它会列出匹配的名称,就像谷歌搜索建议一样。
使用以下JavaScript进行搜索:
function fruitSearch() {
// Declare variables
var input, filter, ul, li, a, i;
input = document.getElementById('searchInput');
filter = input.value.toUpperCase();
ul = document.getElementById("fruits");
li = ul.getElementsByTagName('li');
// Loop through all list items, and show those who match the search query
for (i = 0; i < li.length; i++) {
a = li[i].getElementsByTagName("a")[0];
if (a.innerHTML.toUpperCase().indexOf(filter) > -1) {
li[i].style.display = "block";
} else {
li[i].style.display = "none";
}
}
}
函数搜索(){
//声明变量
var输入、滤波器、ul、li、a、i;
输入=document.getElementById('searchInput');
filter=input.value.toUpperCase();
ul=document.getElementById(“果实”);
li=ul.getElementsByTagName('li');
//循环浏览所有列表项,并显示与搜索查询匹配的项
对于(i=0;i-1){
li[i].style.display=“block”;
}否则{
li[i].style.display=“无”;
}
}
}
一切都按照设计和预期工作,直到这里,一旦用户清除输入字段,所有水果列表项现在都可见而不是隐藏
当用户清除输入
字段时,如何重置列表项并将其全部隐藏
首先,您需要更改html。您需要添加
然后,您可以设置一个条件来检查输入的长度是否超过一个
function fruitSearch() {
// Declare variables
var input, filter, ul, li, a, i;
input = document.getElementById('searchInput');
filter = input.value.toUpperCase();
ul = document.getElementById("fruits");
li = ul.getElementsByTagName('li');
if(input.value.length == 0){
ul.style.display = "none";
return;
}else{
ul.style.display = "block";
}
// Loop through all list items, and hide those who don't match the search query
for (i = 0; i < li.length; i++) {
a = li[i].getElementsByTagName("a")[0];
if (a.innerHTML.toUpperCase().indexOf(filter) > -1) {
li[i].style.display = "block";
} else {
li[i].style.display = "none";
}
}
}
函数搜索(){
//声明变量
var输入、滤波器、ul、li、a、i;
输入=document.getElementById('searchInput');
filter=input.value.toUpperCase();
ul=document.getElementById(“果实”);
li=ul.getElementsByTagName('li');
if(input.value.length==0){
ul.style.display=“无”;
返回;
}否则{
ul.style.display=“块”;
}
//循环浏览所有列表项,并隐藏与搜索查询不匹配的项
对于(i=0;i-1){
li[i].style.display=“block”;
}否则{
li[i].style.display=“无”;
}
}
}
这里有一个有效的用if语句启动函数,检查值是否为“”,然后根据该值决定是否必须完成其余代码
var input, filter, ul, li, a, i;
input = document.getElementById('searchInput');
if (input.value==''){
document.getElementById("fruits").style.display='none';
}
else{
// the rest of the function
}
提示:您应该添加事件侦听器,而不是使用内联事件
if (document.GetElementById('searchInput').value == '')
{
for (i = 0; i < li.length; i++)
{
li[i].style.display = none;
}
} else {
// REST OF CODE
}
if(document.GetElementById('searchInput')。value='')
{
对于(i=0;i
因为您的函数在每个KeyUp
事件上都会被调用,只需将
函数中的if语句将起作用。您可以使用JQuery
keyup
获取实时区分大小写的搜索。使用显示
和隐藏
,可以显示相关结果。以下是更新的代码:
$(“#searchInput”)。在('keyup',function()上{
var searchValue=$(this.val();
searchAndFilter(searchValue)
});
函数searchAndFilter(searchTerm){
如果(searchTerm==''){
$(“#水果里”).hide()
}否则{
$(“#li”)。每个(函数(){
var currentText=$(this.text();
currentText=currentText.toUpperCase();
searchTerm=searchTerm.toUpperCase();
if(currentText.indexOf(searchTerm)>=0){
$(this.show();
}
});
}
}
$(文档).ready(函数(){
$(“#水果里”).hide();
});代码>
- 芒果
- 苹果
- 葡萄
- 樱桃
你显然是从w3schools那里得到的,这意味着你确实复制了n'粘贴。您应该对它进行更多的编辑,因为w3schools中的一个显示了所有项目的开头和结尾。因此,最好的解决方案是添加一个if…else语句,如下所示:
<ul id="fruits">
<li><a href="#">Mango</a></li>
<li><a href="#">Apple</a></li>
<li><a href="#">Grape</a></li>
<li><a href="#">Cherry</a></li>
</ul>
if(input.value.length==false){
ul.style.display=“无”
}否则{
ul.style.display=“块”
}
或者,您也可以使用switch语句。只需先测试输入值,如果输入值为空,则进行特殊处理。在这种特殊情况下,请将它们全部隐藏。即使更改为后,您的搜索仍无法工作。听起来您正在尝试实现数据列表已经可以实现的功能,而无需编码。它是否可取取决于您需要的浏览器支持,我想。@HemaNandagopal它不起作用,因为他在他的
标记中缺少标记。我在回答中解释过。是的,看到了:)我发布它是因为OP说它按预期工作,所以。首先,它不起作用!第二,当问题都在纯Javascript中时,您正在使用JQuery什么不起作用?第二,这个问题被标记为JQuery。你的答案完全错了。当用户搜索时,它不会显示答案,因为它区分大小写。当输入为空时,更重要的结果不会隐藏:)如果您想知道如何在这里修复它,您可以使用jsfiddle@edisoni.1337。伟大的我将尝试使用jQuery而不是jsp。请看3年前@edison biba接受的答案。问题不在于复制粘贴的代码,而是针对代码中的错误元素。
if (document.GetElementById('searchInput').value == '')
{
for (i = 0; i < li.length; i++)
{
li[i].style.display = none;
}
} else {
// REST OF CODE
}