JavaScript自动完成停止循环

莱桑德鲁

我正在尝试构建一个简单的自动完成功能,并且遇到以下脚本问题

<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并且所有结果都将被删除。谁能告诉我如何停止获取重复副本?

Zsolt Szatmari

问题在于,processSearch()每次击键都会调用它,并且您始终将结果附加到以前的结果中。您需要在开始的回调中删除先前的结果,即遍历result元素的所有子元素,然后使用删除它们removeChild()然后,您可以添加新结果。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章