jquery ui .autocomplete()在blur()后输入相同的字母时不触发

时间:2011-08-17 12:16:45

标签: jquery jquery-ui

此处的示例代码:http://jsbin.com/etaziy(使用http://jqueryui.com/demos/autocomplete/

如果你输入'j',你会得到3个名字,'John''Jack'和'Joe'。如果你模糊了,我清除输入,只需输入val('')。然后,如果你回到输入,并再次输入'j',没有任何反应?直到你键入第二个匹配的字母才能显示弹出窗口。

我的例子看起来有点奇怪,但实质上这是我正在努力的一个真正的缩减版本。我需要在blur()之后清除输入,并在选择后清除它。这样做会使后续选择看起来很麻烦。

我部分地认为这是预期的功能,但出于我的目的,它不是我想要的。一旦输入任何字母,我真的需要弹出列表来显示。

干杯。

2 个答案:

答案 0 :(得分:11)

问题是自动完成会在内部跟踪它匹配的值,因此当您第一次键入j时,它会将此内部值设置为“j”,然后它不会重置为空将输入更改为空时的字符串。

查看自动完成源后,我无法找到如何直接访问内部变量,但是一旦您将输入更改为空,您可以通过运行其他搜索强制自动完成为您更新它(并且长度为零,它实际上不会进行搜索)。

$(function() {
    $("#search").autocomplete({
                source: data,
                change: function() { // Triggered when the field is blurred, if the value has changed; ui.item refers to the selected item.
                        $("#search").val("");
                        $("#search").autocomplete("search", "");    //THIS IS THE NEW LINE THAT MAKES IT HAPPY
                }
        });
});

答案 1 :(得分:4)

只需替换jquery.ui.autocomplete.js

中的第98行
if ( self.term != self.element.val() ) { // only search if the value has changed

if(true){