我正在尝试构建一个简单的自动完成功能,并且遇到以下脚本问题
<input type="text" name="search" id="searchField" placeholder="search for something" />
<div class="results-list">
<ul id="searchResults"></ul>
</div>
<script>
var users = JSON.parse('{{ $accounts }}'); // json data from php script
// add event listener
Event.add('searchField', 'keyup', function(){
if(document.getElementById('searchField').value.length > 1) {
processSearch(users, 'searchField', 'searchResults');
}
else {
document.getElementById('searchResults').innerHTML = '';
}
});
function processSearch(data, field, result) {
if(document.getElementById(field).value.length == 0) {
document.getElementById(result).innerHTML = '';
}
else {
for (var k in data) {
if(data.hasOwnProperty(k)) {
if(data[k].indexOf(document.getElementById(field).value) != -1) {
var list = document.createElement('li');
list.innerHTML = data[k];
document.getElementById(result).appendChild(list);
}
}
}
}
}
</script>
现在,我得到了正确的结果,但是如果我继续写下去,结果就会被重现,结果会出现很多重复的结果,如下图所示
当我删除时,结果仍然是重复的,除非字段的长度小于1并且所有结果都将被删除。谁能告诉我如何停止获取重复副本?
问题在于,processSearch()
每次击键都会调用它,并且您始终将结果附加到以前的结果中。您需要在开始的回调中删除先前的结果,即遍历result元素的所有子元素,然后使用删除它们removeChild()
。然后,您可以添加新结果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句