当用户输入不在自动完成下拉列表中的值时,我需要通知

时间:2010-11-13 02:44:55

标签: javascript jquery autocomplete

我正在使用jQuery UI自动完成功能将数据输入到输入字段中,并通过ajax从数据库中提取值。这都是正常的自动完成。

但是,用户可以输入不在数据库中的值,我想知道如何处理它。

我正在尝试避免在更改字段时对数据库进行另一次ajax调用,以检查数据是否为新数据。由于我经常使用自动完成功能,因此我必须对许多此类检查进行编码。

如果我知道数据是新的,我可以为用户提供是否将其添加到数据库的选项,或者通知他们错误输入。

也许自动填充通知用户输入了新值。

或许有一种方法可以将用户仅限制为下拉数据。 (这会引起我认为的其他问题)

或者也许有人有更好的主意。

相关问题(或者我可以单独发布)

如果用户标记为空字段,如何触发自动填充功能打开? 将minLength的数量设置为零仍然要求用户至少按下向下箭头。

我是否可以通过编程方式触发下拉菜单,例如从向下箭头的图像中触发。

由于

2 个答案:

答案 0 :(得分:1)

尝试close事件。 (http://docs.jquery.com/UI/Autocomplete#event-close),如果找不到任何内容,自动完成将关闭。您可以查看事件以查看导致关闭的原因,如果是XHR,则应表示由于未找到任何项目而导致自动完成关闭。不能保证它会起作用,但它可能值得一试。

答案 1 :(得分:1)

您可以创建这样的自定义源函数:

$("field").autocomplete({
  source: function(request, response) {
    fetchFromDB(request.term, function(data) {
      // if data.length == 0 it was not in DB
      response(data);
    });
  }
});

现在使用fetchFromDB获取结果。

至于触发自动完成功能,您可以执行以下操作:

$("field").focus(function(event) {
  var e = $.Event("keydown.autocomplete");
  e.keyCode = $.ui.keyCode.DOWN;
  $("field").trigger(e);
});

这应该可行,我使用类似的代码自动触发自动完成下拉列表中第一个元素的选择。