我正在使用 jqueryUI 自动完成构建一个命令行,它一次构建一个短语(转到下一个短语的 TAB 会将文本复制到其他容器并清除下一个短语的输入)。
每个短语可以从自动完成中选择或完全任意(没有匹配仍然是有效的短语)。However, when a phrase is selected I need to the know which one it was (was it selected from the autocomplete or arbitrary).
问题是一个已经知道并期望某些自动完成选项返回的高级用户可能会简单地键入一个他们知道会在 AJAX 请求有机会返回之前很快返回并点击 TAB 的短语,这迫使我将该短语标记为“任意" 直到请求返回,这是不正确的并导致一些错误的行为。
我可以暂时将其标记为任意,然后如果它与响应中返回的任何内容匹配,则返回并更改它,但这对用户不友好,因为它可能会使用户在处理请求时所做的一切(因为短语是上下文相关的)无效。
我想我应该将自动完成列表缓存在 JS 变量中并将输入与该列表匹配,这样它将是同步查找而不是请求(我会继续发出请求,在每个按键上更新缓存的对象)
这似乎不是万无一失的(考虑一下,如果请求花费的时间太长,退格可能会导致它不同步,您将匹配一个选项少于应有的列表;直到请求返回具有更宽松约束的新列表)。
我不是在寻找一个明确的答案,而只是关于最有效的实现方式的一些建议,因为事实证明它非常棘手。
诸如查找数据结构之类的东西?我关心查找性能的大小是多少?也许你可以想办法让它防弹?