输入一个字母时,搜索栏不显示所有相关结果

Posted

技术标签:

【中文标题】输入一个字母时,搜索栏不显示所有相关结果【英文标题】:search bar does not show all relevant results when one letter is entered 【发布时间】:2021-04-29 17:34:22 【问题描述】:

我正在尝试创建一个显示数组对象名称的搜索。输入的字母越多,搜索范围就越窄。但是,当我输入一封信时,它只显示一个结果,而 console.log 显示几个。上图是我输入字母“s”时想要的结果,但我希望它是 html 文本,但下图是结果。我似乎找不到问题,它发生在我的几个练习项目中,控制台能够检测到与输入的字母相关的所有名称,但 html 没有。请有人告诉我为什么文本没有显示以及如何修复它,如果这是一个新手错误,我很抱歉,我是一个 javascript 初学者,这是我的第一个个人练习项目。谢谢

    var students = [
        name: `Elon Musk`,
        present: 'true'
    ,
        name: `Bruce Wayne`,
        present: 'false'
    ,
        name: `Steve Rogers`,
        present: 'true'
    ,
        name: `SpiderMan`,
        present: 'true'
    ,
        name: `John Snow`,
        present: 'false'
    , 
        name: 'Sonic',
        present: `true`
    , 
        name: `Johnny Silverhand`,
        present: `false`
    
    ]

    var totalStudents = document.createElement("h2")
    totalStudents.textContent = `Total Students: $students.length`
    document.querySelector("body").appendChild(totalStudents)


    var numOfAbs = students.filter(function (student) 
        return student.present === "true"
    )

    var absDisplay = document.createElement("h2")
    absDisplay.textContent = `Number of students present not present: $numOfAbs.length`
    document.querySelector("body").appendChild(absDisplay)
    


    document.querySelector("#ClassReg").addEventListener("click", function() 
        students.forEach(function (student) 
            var studentNames = document.createElement("p")
            studentNames.textContent = `$student.name - $student.present`
            document.querySelector("#register").appendChild(studentNames)
            
        )
    )


    document.querySelector("#search-text").addEventListener('input',function (e)
            students.forEach(function (student) 
                if (student.name.toLowerCase().includes(e.target.value.toLowerCase())) 
                    console.log(student.name)
                    document.querySelector("#register").innerHTML = ""
                    const logger = document.createElement("h4")
                    logger.textContent = student.name
                    document.querySelector("#register").appendChild(logger)
                
            )
    )

    document.querySelector("#search-text").addEventListener('input', function (e) 
        students.forEach(function (student) 
            if (e.target.value.includes(student.name.toLowerCase()))
                student.present = 'true'
                console.log(student.present, student.name)
            
        ))
 
    
<!DOCTYPE html>
<html lang="en">
<head>
    <title>Register</title>
</head>
<body>
    <h1>Register</h1>
    <button>Login</button>
    <button id="ClassReg">ClassReg</button>
    <input id="search-text" type="text" placeholder="Filter students">
    <div id="register">

    </div>
    <script src="/registerDB/script.js"></script>
</body>
</html>

【问题讨论】:

这实际上适用于我的 chrome 版本。你在什么浏览器上运行? 【参考方案1】:

看起来您正在清除每个循环上的 #register 的内容。我认为你的意思是在 for 循环之前有这一行:

document.querySelector("#register").innerHTML = ""

【讨论】:

以上是关于输入一个字母时,搜索栏不显示所有相关结果的主要内容,如果未能解决你的问题,请参考以下文章

搜索栏不显示搜索结果

搜索栏不返回任何结果

如何在Android中显示与搜索词相关的项目列表

UITableView 中的搜索栏不显示单元格标签中的文本

显示按字母顺序排列的搜索结果时如何修改行数

电脑底部的任务栏不显示图标了怎么办?但是可以运行