【问题标题】:Autocomplete doesn't fire select function if tab out of input quickly如果标签快速退出输入,自动完成不会触发选择功能
【发布时间】:2016-08-23 19:42:43
【问题描述】:

我已经为输入配置了自动完成功能,延迟选项设置为 0,自动对焦设置为 true。来源:自动完成设置为 AJAX 调用。通常情况下,如果用户输入搜索字符串并在字段外使用制表符,则会选择第一项。

但是,如果有经验的用户输入的搜索字符串应该只有一个匹配项并且非常快 选项卡在输入之外,则 select 选项指定的函数不会触发,并且输入只包含用户输入的搜索字符串。这会在提交表单时导致错误,因为尚未进行有效选择(通常,选择匹配项会将隐藏的表单字段设置为所选匹配项的值)。

如果我在 source 选项指定的函数中放置一个断点来检索匹配项,我可以看到它被调用,并返回一个匹配项列表。但是,我在 select 选项指定的函数中放置的断点在我快速跳出时永远不会命中。

当针对 localhost 或远程网络服务器运行时,我可以在 Chrome 和 IE 11 中重现此行为。 jquery-ui版本为v1.11.4。

问题:是否可以将自动完成配置为 - 始终 - 如果用户输入搜索字符串并从输入中跳出标签,则无论多快都选择第一个返回的匹配项?

【问题讨论】:

  • 你能提供一个工作演示吗?
  • 我可以直接在 jQuery UI 演示中重现 -- jqueryui.com/autocomplete。只需输入一个字符并快速离开。如果你足够快,你会发现匹配列表不会出现。
  • 嗨,你有没有找到任何解决方案?

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


【解决方案1】:

如果焦点不在相关输入中,自动完成将被“禁用”,因此如果您从该输入移开焦点,您将无法访问自动完成的值。

此解决方案在菜单被触发(并打开)时才起作用:

var availableTags = [
  "ActionScript",
  "AppleScript",
  "Asp",
  "BASIC",
  "C",
  "C++",
  "Clojure",
  "COBOL",
  "ColdFusion",
  "Erlang",
  "Fortran",
  "Groovy",
  "Haskell",
  "Java",
  "JavaScript",
  "Lisp",
  "Perl",
  "PHP",
  "Python",
  "Ruby",
  "Scala",
  "Scheme"
];
$( "#tags" ).autocomplete({
  source: availableTags,
  autoFocus: true,
  delay: 0,
  focus: function(event, ui) {
    $(this).val(ui.item.value)
  }
});
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<link rel="stylesheet" href="/resources/demos/style.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<div class="ui-widget">
  <label for="tags">Tags: </label>
  <input id="tags">
</div>

那里的延迟设置为 0,因此不会有延迟,但是如果您的 source 是一个 ajax 调用 - 您将有延迟(如果用户将焦点移动到其他元素,结果将不是你要找的东西)。

我知道这不是您正在寻找的,但是如果您使用预定义的值,它可以为您提供解决方案。

【讨论】:

  • 感谢您的回复,德克尔。我应该指定这是基于 AJAX 的数据源,所以它不会解决我遇到的特定问题 - 一个正在快速输入数据的用户。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-09
  • 2012-08-17
  • 2014-02-23
  • 1970-01-01
  • 2010-09-25
相关资源
最近更新 更多