【问题标题】:jquery autocomplete not showing dropdownjquery自动完成不显示下拉菜单
【发布时间】:2014-11-24 10:16:53
【问题描述】:

我有这个自动完成输入:

<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

        }
    });

当用户输入“测试”时,我得到以下结果:

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

选择下拉菜单显示正常

我添加了一个显示全部的选项,输入一个“*”

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

结果是:

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

但没有显示选择下拉菜单。

它可以在我的本地机器上运行,所以我认为这可能是超时问题。这就是我添加超时选项的原因(不确定是否正确)。没有帮助。 我认为它可能是除“测试”用户(只有另外两个用户)之外的用户中的数据......所以我通过填写他们的姓名(管理员和 cron)分别搜索了这两个用户,并且数据通过选择框返回正常显示。

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

我正在使用 JQ UI 1.11

编辑:

我刚刚使用“___”作为搜索文本进行了测试,所有用户都显示在下拉菜单中。我假设代码:

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

与我搜索文本“___”时的操作相同

在控制台中,我可以看到 ajax 调用,术语设置为“___”,结果如上。就好像当我使用'*'时它不想显示菜单列表,并且只在实时服务器上。本地工作正常。

【问题讨论】:

标签: jquery autocomplete


【解决方案1】:

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

这段代码:

$(".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 脚本,将“*”-->“”转换为 SQL 查询 ... name LIKE '%%'。我本可以做到这一点,因此使用 '_' 作为列表的所有触发器都不需要转换,但我喜欢将“*”作为触发器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 2012-06-09
    • 2019-10-01
    相关资源
    最近更新 更多