jQuery自动完成没有'如果未选择任何值,则t点火

jQuery autocomplete doesn't fire if no value was selected

本文关键字:选择 如果 任何值 点火 jQuery      更新时间:2023-09-26

用例:用户正在寻找"测试"

工作示例:用户编写"test"并选择自动完成值

问题:用户编写"测试",按下回车

下次当我点击输入字段时,不会自动完成,但只有当我之前按下回车键(选择输入值)时才会自动完成!

this.$el.autocomplete({
    source: mySource,
    minLength: 0
}).focus(function(){
   that.showAutocomplete();
}).click(function(){
   that.showAutocomplete();
});
showAutocomplete: function() {
   this.$el.autocomplete("search", this.$el.val());
   console.log("was here...");
}

在我的控制台中从来没有"在这里…",那么为什么自动完成("搜索")事件没有启动呢?

谢谢!

也许你可以解释你正在寻找什么,但它似乎在这里起作用。您没有显示所有的代码,或者有更大的问题正在发生,因为您引用that和定义showAutocomplete函数的方式永远不会按原样工作。

但在小提琴中,自动完成显示在每个focusclick上。但如果选择了某个内容,它将只显示上次搜索的结果。例如,如果我键入test并且test不在结果中,则即使在字段blurs之后,也不会显示任何内容,然后再键入focus,只要输入保持值test。如果test在结果中,那么下次我选择字段时,它将只显示test。删除该值将显示更多结果。

此外,that.autocomplete("search", that.val());不是你触发搜索事件的方式或初始化它的方式。要设置搜索事件,你可以这样做:

$("#tags").autocomplete({
    source: availableTags,
    minLength: 0,
    search: function (event, ui) {
        // do something on event
    }
});

或者在初始化自动完成后,您可以执行以下操作:

$el.autocomplete("search", function (event, ui) {
        // do something on event
    }
);

在您的示例中,每次您关注或单击字段时,您都试图附加一个新的处理程序进行搜索,除非您只是传递一个值而不是函数。一旦附加了搜索,正确的方式是,你可以手动触发它:

 $el.trigger('search');

但需要指出的是,在您的示例中,这实际上不会起到任何作用,因为您从未将处理程序附加到搜索事件。

Fiddle:http://jsfiddle.net/AtheistP3ace/yuvdnpj7/

HTML:

<label for="tags">Tags:</label>
<input id="tags">

JS:

$(function () {
    var availableTags = [
        "ActionScript",
        "AppleScript",
        "Asp",
        "BASIC",
        "C",
        "C++",
        "Clojure",
        "COBOL",
        "ColdFusion",
        "Erlang",
        "Fortran",
        "Groovy",
        "Haskell",
        "Java",
        "JavaScript",
        "Lisp",
        "Perl",
        "PHP",
        "Python",
        "Ruby",
        "Scala",
        "test",
        "Scheme"];
    $("#tags").autocomplete({
        source: availableTags,
        minLength: 0
    }).focus(function () {
        showAutocomplete($(this));
    }).click(function () {
        showAutocomplete($(this));
    });
    function showAutocomplete(that) {
        that.autocomplete("search", that.val());
        console.log("was here...");
    }
});