jQuery自动完成自动对焦无法跟上

时间:2011-11-29 16:49:39

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

当使用自动聚焦设置为true的jQueryUI自动完成时,如果键入太快并按Enter键,则第一个选择将替换您键入的内容,即使它不匹配。

例如,如果您输入“app”,并且滚动自动填充的第一个选择是“apple”,然后继续快速键入“applique”并按Enter键,则“applique”将替换为“apple” 。

在输入的文本被自动填充中的第一个选择替换之前,有没有办法确保第一个选择仍然与输入的文本匹配?

2 个答案:

答案 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 );
                }
                */
            }

一切都会正常工作:)