具有来自数据库的多个值的 jQuery UI 自动完成

Posted

技术标签:

【中文标题】具有来自数据库的多个值的 jQuery UI 自动完成【英文标题】:jQuery UI Autocomplete with Multiple Values from Database 【发布时间】:2011-06-23 04:10:01 【问题描述】:

我正在尝试修改在http://jqueryui.com/demos/autocomplete/#multiple 找到的代码以使用从我的数据库生成的数据,而不是使用列表中的数据

$(函数() var 可用标签 = [ "动作脚本", “苹果脚本”, “阿斯普”, “基本的”, “C”, "C++", “克洛朱尔”, "COBOL", “冷融合”, “二郎”, “Fortran”, “时髦”, “哈斯克尔”, “爪哇”, "javascript", “口齿不清”, “珀尔”, "php", “Python”, “红宝石”, “斯卡拉”, “方案” ]; 函数拆分(val) 返回 val.split(/,\s*/); 函数提取最后(术语) 返回拆分(术语).pop(); $( "#tags" ) // 选择项目时不要离开选项卡上的字段 .bind(“keydown”,函数(事件) if ( event.keyCode === $.ui.keyCode.TAB && $( this ).data( "自动完成" ).menu.active ) event.preventDefault(); ) .自动完成( 最小长度:0, 来源:功能(请求,响应) // 委托回自动完成,但提取最后一项 响应($.ui.autocomplete.filter( availableTags, extractLast(request.term))); , 焦点:函数() // 防止在焦点上插入值 返回假; , 选择:函数(事件,用户界面) var terms = split(this.value); // 移除当前输入 条款.pop(); // 添加选中的项目 条款.push(ui.item.value); // 添加占位符以获取末尾的逗号和空格 条款.push(""); this.value = terms.join(", "); 返回假; ); );

编辑:我在其他页面上使用下面的代码成功地从我的数据库生成单个关键字,所以我知道 *generate_keywords.php* 脚本可以工作并返回数据,但我想显示 多个 现有的关键字,就像在 jQuery 示例中一样:

 $("#text-keywords").autocomplete(
        来源:“generate_keywords.php”,
        最小长度:2,
        选择:函数(事件,用户界面)
            $('#text-keywords').val(ui.item.label);
        
    );

但是,我无法弄清楚如何利用上面示例代码中的“函数(请求,响应)”从我的 *generate_keywords.php* 脚本返回数据。我玩过使用 ajax() 函数,但我没有任何运气。

谢谢!

【问题讨论】:

generate_keywords.php 是否正确响应?它的反应是什么? 是的,generate_keywords.php 给出以下 JSON 输出:["id":"48","label":"COMP_DATABASES","id":"37","label ":"COMP_GAMES","id":"15","label":"COMP_GENERAL","id":"34","label":"COMP_HARDWARE","id":"31 ","label":"COMP_LINUX","id":"36","label":"COMP_NETWORKING","id":"55","label":"COMP_PALM","id ":"14","label":"COMP_SECURITY","id":"33","label":"COMP_SOFTWARE"] 你的意思是你想要类似的东西:COMP_DATABASES、COMP_HARDWARE、COMP_SOFTWARE 等。用“,”分隔的多个项目的排序 【参考方案1】:

http://jqueryui.com/demos/autocomplete/#multiple-remote

检查上面的链接。基本上你必须通过“getJSON”调用你的服务器

        .autocomplete(
            //blah-blah-blah
            source: function( request, response ) 
                $.getJSON( "search.php", 
                    term: extractLast( request.term )
                , response );
            ,
            //blah-blah-blah

【讨论】:

如何限制重复的远程值?【参考方案2】:
    $(function() 
        function split(val) 
            return val.split(/,\s*/);
        

        function extractLast(term) 
            return split(term).pop();
        
        $("#states_names").autocomplete(
            minLength: 4,
            source: function(request, response) 

                $.ajax(
//receives json array answer from the url
                    url: "search/state",
                    data: 
                        term: extractLast(request.term)
                    ,
                    dataType: "json",
                    type: "POST",
                    success: function(data) 
                        response(data);
                    ,
                    error: function() 
                        // added an error handler for the sake of the example
                        response($.ui.autocomplete.filter(
                            ["opt1","opt2"]
                            , extractLast(request.term)));
                    
                );
            ,
            focus: function() 
                // prevent value inserted on focus
                return false;
            ,
            select: function(event, ui) 
                var terms = split(this.value);

                // remove the current input
                terms.pop();

                // add the selected item
                terms.push(ui.item.value);

                // add placeholder to get the comma-and-space at the end
                terms.push("");
                this.value = terms.join(",");
                return false;
            
        );
    );

【讨论】:

以上是关于具有来自数据库的多个值的 jQuery UI 自动完成的主要内容,如果未能解决你的问题,请参考以下文章

具有初始值的 JQuery UI Datepicker 日期格式问题

Jquery从具有数组/ JSON值的多个数据属性中检索数据

具有来自函数属性的静态值的 jQuery 发布表单

来自cshtml中SQL Server查询的jquery UI自动完成列表

Phpmyadmin 仅接受来自具有多个输入值的 json 数组中的一个条目

如何使用 jquery 创建具有来自动态创建的表单字段的值的多维数组?