JavaScript:需要输入元素根据输入的数据更改选项
我有一个页面,我需要使用纯javascript过滤所有类型的数据(作为JSON变量)。在我尝试实现一个datalist之前,一切都很顺利,其中该列表的内容根据用户输入实时更新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
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事件发生。
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>
`;
}
}
}
}