JavaScript:需要输入元素根据输入的数据更改选项

JavaScript:需要输入元素根据输入的数据更改选项,javascript,html,filter,Javascript,Html,Filter,我有一个页面,我需要使用纯javascript过滤所有类型的数据(作为JSON变量)。在我尝试实现一个datalist之前,一切都很顺利,其中该列表的内容根据用户输入实时更新 var data=[{name:“Paul”},{name:“Alex”},{name:“Laura”}]//这只是一个示例对象 函数updateSearch(){ 让search=document.getElementById('search').value; 让options=document.getElementB

我有一个页面,我需要使用纯javascript过滤所有类型的数据(作为JSON变量)。在我尝试实现一个datalist之前,一切都很顺利,其中该列表的内容根据用户输入实时更新

var data=[{name:“Paul”},{name:“Alex”},{name:“Laura”}]//这只是一个示例对象
函数updateSearch(){
让search=document.getElementById('search').value;
让options=document.getElementById('searchList');
options.innerHTML=“”;
如果(search.length>=2){
search=search.toLowerCase();
对于(数据的d){
if(d.name.toLowerCase().search(search)==0){
options.innerHTML+=`
${d.name}
`;
}
}
}
}

实现所需功能的一个解决方案是将
updateSearch()
绑定到的事件类型从
onchange
替换为
onkeyup

const数据=[
{name:“Foo”},
{name:“Bar”},
{name:“Bing”},
{姓名:“邦”},
{name:“Boo!”};
函数updateSearch(){
让search=document.getElementById('search').value;
让options=document.getElementById('searchList');
options.innerHTML=“”;
如果(search.length>=2){
search=search.toLowerCase();
对于(数据的d){
if(d.name.toLowerCase().search(search)==0){
options.innerHTML+=`
${d.name}
`;
}
}
}
}

  • HTML有自己的标签,因此您不能使用列表中没有的任何标签,就像在您的案例中那样datalist。要列出元素,最好使用标记ol(有序列表)或ul(无序列表)

  • 另一方面,如果希望函数在用户键入时工作,则需要使用onkeyup事件

    当用户释放一个键(在键盘上)时,onkeyup事件发生。

html:

    DFD
js:

函数更新搜索(){
让search=document.getElementById('search').value;
让options=document.getElementById('searchList');
options.innerHTML=“”;
如果(search.length>=2){
search=search.toLowerCase();
对于(数据的d){
if(d.name.toLowerCase().search(search)==0){
options.innerHTML+=`
  • ${d.name}
  • `; } } } }
    HTML中有datalist tad:,实际上,链接中提到了datalist
    <ul id='searchList'>dfdfd</ul>
    <input type="search" id="search" list='searchList' onkeyup="updateSearch()">
    
    function updateSearch() {
    
        let search = document.getElementById('search').value;
        let options = document.getElementById('searchList');
        options.innerHTML = "";
        if(search.length >= 2){
            search = search.toLowerCase();
            for(let d of data){
                if(d.name.toLowerCase().search(search) === 0){
                    options.innerHTML += `
                        <li>${d.name}</li>
                    `;
                }
            }
        }
    }