刷新数据源自动完成jQuery

时间:2018-10-02 10:18:42

标签: javascript jquery jquery-ui-autocomplete

我想在输入字段上的键入事件后刷新自动完成源。

我的代码如下:

<div class="ui-widget">
    <input id="myInput" type="text">
</div>
var nb = data.length;
var myArray = [];
for (var i = 0; i < nb; i++) {
  myArray.push({
    value: data[i],
    label: data[i],
  });
}

$("#myInput").autocomplete({
  source: myArray,
  minLength: 1,
  select : function(event, ui) {
    // someCode;
  }
}).on("focus", function() {
  $(this).autocomplete("search");
});

在初始化时,我的自动完成源是一个空数组。每次用户按下键后,阵列都会更新。问题是当我填充myArray时,列表没有显示。我必须按箭头键(向上或向下)以打开列表。

此外,在列表打开的情况下进行新搜索(另一个键入)时,它保持不变,并且我没有更新列表。

所以我有2个问题:

  1. 当用户将焦点放在输入字段上时如何打开列表?
  2. 进行新搜索时如何刷新我的来源?

提前谢谢! :)

1 个答案:

答案 0 :(得分:0)

我自己做了,我知道这不是最干净的方法,但这是我的解决方案:

在重建自动完成功能之前将其破坏:

var array = [{'ref1': {'Product': 'Car', 'color': 'Red'}}, {'ref2': {'product': 'velo', 'color': 'red'}}];
var ref1 = array.filter(item => item == {'ref1': {'Product': 'Car', 'color': 'Red'}})[0];
var index = array.indexOf(ref1);
array[index]['Price'] = 8;

强迫它失去焦点,然后将焦点集中在输入上:

$("#myInput").autocomplete("destroy");

正如我所说,这不是最干净的,但对用户透明...