javascript - 自动完成类别和远程数据源

标签 javascript jquery jquery-ui autocomplete jquery-ui-autocomplete

我想做的是通过 jQueryUI 的功能使用自动完成对结果进行分类。经过一些谷歌搜索后,我发现它有一个内置函数(http://jqueryui.com/demos/autocomplete/#categories),但该示例仅适用于本地数据源(javascript 中的数组)。我正在处理远程数据源。它的自动完成功能在没有添加类别代码的情况下工作正常,但在添加时会中断。

这说明php代码没问题(返回json数据的搜索页面)

我从 jQueryUI 站点获取了这段代码:

$.widget( "custom.catcomplete", $.ui.autocomplete, {
                _renderMenu: function( ul, items ) {
                    var self = this,
                    currentCategory = "";
                $.each( items, function( index, item ) {
                if ( item.category != currentCategory ) {
                    ul.append( "<li class='ui-autocomplete-category'>" + item.category + "</li>" );
                    currentCategory = item.category;
            }
            self._renderItem( ul, item );
        });

然后我将它与它的搜索端结合起来(更改为类别):

$(function() {
        $( "#search" ).catcomplete({
            delay:0,
            source: "query/encode-json.php?term="+ $("#search").val(),
            select: function(event, ui){
                alert(ui.item.label);
            }
        });     
    });

但它不起作用 :( 我在谷歌上搜索了很多,但其他人都对它的 json 方面有疑问。这是我的 json 数据:

[{"value":"some dude","id":"1","category":"artist"},{"value":"some other dude","id":"2","category":"artist"}]

最佳答案

我很确定你的问题是你传递给自动完成的选项对象的 source 属性:

$("#search").catcomplete({
    delay:0,
    source: "query/encode-json.php?term="+ $("#search").val(),
    select: function(event, ui){
        alert(ui.item.label);
    }
});    
当您实例化小部件时,

source 将被评估一次。换句话说,$("#search").val() 不会在用户每次键入时都执行。

由于默认情况下自动完成会在查询字符串中发送 term,您应该能够做到:

$("#search").catcomplete({
    delay:0,
    source: "query/encode-json.php",
    select: function(event, ui){
        alert(ui.item.label);
    }
}); 

我很确定其他一切都是正确的,因为使用您的数组作为本地数据源与类别工作正常:http://jsfiddle.net/jadPP/

关于javascript - 自动完成类别和远程数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11706892/

相关文章:

javascript - 无法从对象中获取数据

javascript - jquery ui ddraggable : limit dragable area by pixels

java - 如何从 XML 文件中删除 XML 标签而不对标签名称进行硬编码

javascript - 如何获取 JSONP 数据作为 javascript 对象

jquery - 在类似向导的流程中加载 HTML 和绑定(bind) View 模式的有效方法

jquery - 使用 Off 和 On 禁用/启用 Javascript 事件,如何解除绑定(bind)和绑定(bind)?

javascript - Node.js Promise 和 for 循环

javascript - Sublime Text 2 中的 JsLint

javascript - jQuery UI removeClass 不显示动画

jquery - 如何在 jquery ui 组合框中放置占位符?