如何在jQueryUI自动完成列表中选择项目时阻止输入元素的更新?

时间:2013-05-22 21:07:50

标签: jquery jquery-ui jquery-ui-autocomplete

我有以下jQueryUI自动完成

$('#clientSearch').autocomplete({
  source: function (request, response) {

    var url = window.apiUrl + '/clients?searchText=' + request.term;

    var request = $.ajax({
      url: url,
      type: 'GET',
      dataType: "json",
      cache: false,
      contentType: 'application/json; charset=utf-8'
    });

    request.done(function (clientList) {
      response($.map(clientList, function (client) {
        return {
          label: client.lastName + ', ' + client.firstInitial + '. ' + client.sex + '/' + client.age,
          value: client.id
        }
      }));
    });

    request.fail(function (jqXHR, textStatus, errorThrown) {
      response(
      {
        label: 'Error retrieving clients',
        value: null
      }
      );
    });

  },
  minLength: 2,
  select: function (event, ui) {
    event.preventDefault();
    getClient(ui.item.value);
  }
});

当按下向下箭头以将焦点/高亮显示移动到项目#1时显示自动完成列表后,item.value将显示在用户输入搜索条件的输入元素中。

根据我的阅读,在select事件中添加event.preventDefault(),如上面的代码所示,应该阻止将item.value插入到input元素中。

但是,仍然会插入item.value,并且只有在突出显示的项目被“选中”w / ENTER时才会点击select事件中的断点。

我希望原始搜索文本保留在input元素中,因为突出显示在自动完成列表中的项目之间移动。

1 个答案:

答案 0 :(得分:4)

改为使用focus事件:

focus: function (event, ui) {
    event.preventDefault();
}