jquery自动完成没有显示下拉列表

时间:2014-11-24 10:16:54

标签: jquery autocomplete

我有这个自动完成输入:

<input type="text" id="find_user" class="autocomplete_field" />

脚本:

$("#find_user").autocomplete({
        source: "/get_ajax_data.php?type=find_user",
        minLength: 3,
        timeout : 1000,
        select: function( event, ui ) {
            window.location.href = "/user_admin.php?action=edit&id=" + ui.item.id

        }
    });

当用户输入&#34; test&#34;我得到了以下结果:

[{"id":"26","uname":"test 1","firstname":"Test","lastname":"1","email":"1@mail.com", ............

选择下拉列表显示正常

我添加了一个显示所有内容的选项,输入&#34; *&#34;

$(".autocomplete_field").keyup(function(){
            if ($(this).val() == '*') {
                $(this).autocomplete('search', "___");
            }
        })

结果是:

[{"id":"1","uname":"admin","firstname":"Ad","lastname":"Min","email":"","lang_iso_code":null,.....................

但没有显示选择下拉列表。

它适用于我的本地机器,所以我认为这可能是超时问题。这就是为什么我添加了超时选项(不确定是否正确)。没有帮助。 我认为它可能是其他用户的数据“测试&#39;用户(只有两个其他用户)...所以我通过填写他们的名字(admin和cron)来单独搜索这两个用户,并且选择框显示返回的数据很好。

一旦我尝试在实时网站上查看所有内容,它就不会显示选择下拉列表。 虽然它只有5个用户(admin + cron +三个测试帐号) 需要大约440毫秒才能返回2.2kb的数据。

我正在使用JQ UI 1.11

编辑:

我刚用&#34; ___&#34;进行了测试因为搜索文本和所有用户都显示在下拉菜单中。我假设代码:

$(this).autocomplete('search', "___");

与搜索文本&#34; ___&#34;

时的功能相同 在conlsole中我可以看到ajax调用,term被设置为&#34; ___&#34;,结果如上所示。当我使用&#39; *&#39;时,就好像它不想显示菜单列表一样,并且仅在实时服务器上显示。当地工作正常。

1 个答案:

答案 0 :(得分:0)

经过一些更多的测试,以及搜索和响应事件中的一些控制台输出,我得出结论,我的代码必须导致自动完成字段与自身冲突。

此代码:

$(".autocomplete_field").keyup(function(){
        if ($(this).val() == '*') {
            $(this).autocomplete('search', "___");
            console.log(".autocomplete_field search fired");
        }
    })

调用php页面,从而返回我在控制台中看到的数据。 但在发生事件追踪期间,我也看到原来的搜索功能也被称为:

$("#find_user").autocomplete({
    ....
    search: function( event, ui ) {
        console.log("#find_user search fired");
    }
它按照上面的顺序解雇了。 因此,第二次搜索不符合最低标准,因此菜单没有显示或清除,以便我快速看到任何内容。

通过本地测试结果回来快速,我认为,在第二次搜索可能触发之前,第一次搜索已经启动,得到了结果,并显示了菜单。

我的解决方法是:

$(".autocomplete_field").keyup(function(){
            if ($(this).val() == '*') {
                //$(this).autocomplete('search', "___");
                $(this).autocomplete("option", "minLength", 1);
            } else {
                $(this).autocomplete("option", "minLength", 3);
            }
        })

通过更改PHP脚本来转换&#34; *&#34; - &GT; &#34; &#34;然后很适合SQL查询...名称LIKE&#39;%%&#39;。我本可以做到这一点,以便转换不需要&#39; _&#39;作为列表所有触发器,但我喜欢&#34; *&#34;作为触发器。