当使用自动聚焦设置为true的jQueryUI自动完成时,如果键入太快并按Enter键,则第一个选择将替换您键入的内容,即使它不匹配。
例如,如果您输入“app”,并且滚动自动填充的第一个选择是“apple”,然后继续快速键入“applique”并按Enter键,则“applique”将替换为“apple” 。
在输入的文本被自动填充中的第一个选择替换之前,有没有办法确保第一个选择仍然与输入的文本匹配?
答案 0 :(得分:3)
减少autoComplete选项的延迟。如果您正在使用本地数据,则可以将延迟设置为0.默认情况下,它设置为300(ms)。因此,在按下某个键之后,它需要300毫秒才能重新评估匹配的数据集。
所以,基本上你在第一个项目上进行自动对焦,并且在进入之前没有给它重新过滤的机会。
或者,您可以在第一次自动聚焦后更改延迟中间流。因此,当您第一次等待300ms来显示建议时,然后在焦点事件中,您将计时器减少到0ms,这样它就会更快地过滤列表。
但要小心,因为延迟为0可能会导致问题,如果它是远程数据。这样的事情可能效果很好:
$(".selector").autocomplete({
delay: 300,
focus: function () {
$(".selector").autocomplete("option", "delay", 0);
},
source: sourceData
}
答案 1 :(得分:0)
我知道我迟到了,但这让我发疯了。我不想改变我的延迟,即使我这样做了,如果我键入得太快,它仍会删除我的最后一个字符。
经过一番头痛之后,我找到了最佳解决方案:)
打开你的jquery-ui-1.8.20.custom.js(不能保证代码可以在任何其他版本中使用),然后找到这一行:
blur: function( event, ui ) {
// don't set the value of the text field if it's already correct
// this prevents moving the cursor unnecessarily
if ( self.menu.element.is(":visible") &&
( self.element.val() !== self.term ) ) {
self.element.val( self.term );
}
}
只需注释if statement
,就像这样:
blur: function( event, ui ) {
// don't set the value of the text field if it's already correct
// this prevents moving the cursor unnecessarily
/*COMMENTING THIS IF OUT MAKES AUTOCOMPLETE STOP ERASING WHAT YOU TYPE
if ( self.menu.element.is(":visible") &&
( self.element.val() !== self.term ) ) {
self.element.val( self.term );
}
*/
}
一切都会正常工作:)