AutoComplete jQuery使用JSON数据

sil*_*ntw 5 ajax jquery json jquery-ui jquery-ui-autocomplete

想象一下包含以下数据的json文件:

[
    {
        color: "red",
        value: "#f00"
    },
    {
        color: "green",
        value: "#0f0"
    },
    {
        color: "blue",
        value: "#00f"
    },
    {
        color: "cyan",
        value: "#0ff"
    }
]
Run Code Online (Sandbox Code Playgroud)

使用jQuery的自动完成方法,我希望它能够将颜色显示为选项,以便在输入上选择和插入.

<input type="text" name="selector" id="selector" />

<input type="text" name="color" id="color" />
<input type="text" name="value" id="value" />
Run Code Online (Sandbox Code Playgroud)

以上不需要介绍.选择对的颜色的搜索,input.color色彩值,并input.value价值的价值.

编辑: 我有这个JSON数据:

[{
    "label": "Sec\u00e7\u00e3o 1",
    "value": "1"
}, {
    "label": "Sec\u00e7\u00e3o 2",
    "value": "2"
}, {
    "label": "Sec\u00e7\u00e3o 3",
    "value": "3"
}, {
    "label": "Sec\u00e7\u00e3o 4",
    "value": "4"
}]
Run Code Online (Sandbox Code Playgroud)

这个HTML:

<input type="text" id="name" />
<input type="text" id="value" />
Run Code Online (Sandbox Code Playgroud)

这个jQuery:

$(document).ready(function(){
    $("#name").autocomplete({
        source: "json.php",
        select: function (event, ui) {
            $("#name").val(ui.label);
            $("#value").val(ui.value);
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

我按照安德鲁的回答,它提示我选择数据,但如果我提醒ui.labelui.value变量,则说"未定义".我错过了什么?

Edit2: 假设我有这个HTML:

<input type="text" class="name" />
<input type="text" class="value" />

<input type="text" class="name" />
<input type="text" class="value" />
Run Code Online (Sandbox Code Playgroud)

是否可以使用相同的.autocomplete()方法处理多个选择器?比如,选择我想要的标签input.name,只更新input.value旁边的标签?

[input.name] [input.value]
^我选择^更新
  它旁边的标签值
[input.name] [input.value]
^这保持不变^

And*_*ker 13

使用远程数据源:

$("#selector").autocomplete({
    source: function (request, response) {
         $.ajax({
             url: "my_server_side_resource.php",
             type: "GET",
             data: request,
             success: function (data) {
                 response($.map(data, function (el) {
                     return {
                         label: el.color,
                         value: el.value
                     };
                 }));
             }
         });
    },
    select: function (event, ui) {
        // Prevent value from being put in the input:
        this.value = ui.item.label;
        // Set the next input's value to the "value" of the item.
        $(this).next("input").val(ui.item.value);
        event.preventDefault();
    }
});
Run Code Online (Sandbox Code Playgroud)

$.ajax根据需要调整呼叫.此示例将生成对您的PHP资源的请求,如下所示:

my_server_side_resource.php?长期= XYZ

如果您可以控制服务器端代码,则可以将返回的数据更改为如下所示:

[
    {
        label: "red",
        value: "#f00"
    }, /* etc */
]
Run Code Online (Sandbox Code Playgroud)

您可以简单地使用字符串,即服务器端资源的名称source:

$("#selector").autocomplete({
     source: "my_server_side_resource.php",
     select: /* same as above */
});
Run Code Online (Sandbox Code Playgroud)

使用服务器端资源查看带有JSONP示例远程控制器的完整示例.

编辑:有关使用本地数据的工作演示,请参阅此示例:http://jsfiddle.net/SMxY6/