javascript - jQuery 自动完成建议所有选项,无论输入条目如何

标签 javascript jquery json autocomplete

我有一个 jQuery 脚本,它将获取 JSON 响应并创建与响应中一样多的“玩家”对象。

然后它将添加到 availablePlayers,然后我将其用作 autocompletesource: 字段的变量

当用户选择玩家名称并单击“添加”按钮时,此时只会显示玩家的guid名称

但是,无论我输入什么字母,所有玩家都会作为选项给出。为了说明这一点,如果我输入“Z”并且没有玩家的名字中有 Z,他们的选项仍然会显示。

如何完善此功能?

HTML

<div class="player-widget">
    <label for "players">Players</label>
    <input id="player" />
    <input id="playerGUID" hidden />
    <button id="add">Add</button>
</div>

jQuery

$(document).ready(function(){

var availablePlayers = []; // BLANK ARRAY OF PLAYERS

$("#player").autocomplete({
    source: availablePlayers,
    response: function (event, ui) {
        ui.content = $.map(ui.content, function(value, key) {
            return {
                label: value.name,
                value: value.guid
            }
        });
    },
    focus: function(event, ui) {
        $("#player").val(ui.item.label);
        return false;
    },
    select: function (event, ui) {
        $("#player").val(ui.item.label); // display the selected text
        $("#playerGUID").val(ui.item.value); // save selected id to hidden input
        return false;
    }
});

$.getJSON("http://localhost/Websites/Player-Widgets/service.php", function(data) {

    var feedHTML = '';
    // LOOP THROUGH EACH PLAYER
    $.each(data.players, function(i, player) {

        // DEFINE VARIABLES - BASED ON PLAYER ATTRIBUTES
        var guid = player.guid;
        var name = player.name;
        var dob = player.date_of_birth;
        var birth = player.birthplace;
        var height = player.height;
        var weight = player.weight;
        var position = player.position;
        var honours = player.honours;

        // CREATE NEW PLAYER (OBJECT)
        var player = {
            guid: guid,
            name: name,
            position: position
        };

        // ADD TO PLAYER TAG ARRAY
        availablePlayers.push(player);
    });

    console.log("User friendly array");
    $.each(availablePlayers, function(i, val) {
        console.log(val.guid + " - " + val.name + " [" + val.position + "]");
    });

    console.log("Array printout");
    console.log(JSON.stringify(availablePlayers));

}).done(function(){
    console.log("Done! Success!");
    $("#player").autocomplete("option", "source", availablePlayers);
});

$("#add").click(function() {
    alert($("#playerGUID").val() + " - " + $("#player").val());
});

});

示例 JSON 响应

{
"players": [
    {
        "guid": "1",
        "name": "Matias Aguero",
        "date_of_birth": "1981-02-13",
        "birthplace": "San Nicolas, Argentina",
        "height": "1.83m (6' 0\")",
        "weight": "109kg (17st 2lb)",
        "position": "Prop",
        "honours": "40 caps"
    },
    {
        "guid": "2",
        "name": "George Catchpole",
        "date_of_birth": "1994-02-22",
        "birthplace": "Norwich, England",
        "height": "1.85em (6ft 1\")",
        "weight": "104kg (16st 5lb)",
        "position": "Centre",
        "honours": ""
    }
]
}

最佳答案

您的问题出在源函数中。 源函数使用 request 传递 term 参数来查询,而您忽略它。 如果您使用 availablePlayers 进行查询,则应该使用

source: availablePlayers

以及您当前的函数来映射响应参数中的 {label, text} 对象。

response: function (event, ui) {
        ui.content = $.map(ui.content, function(value, key) {
            return {
                label: value.name,
                value: value.guid
            }
        });
    }

关于javascript - jQuery 自动完成建议所有选项,无论输入条目如何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37167843/

相关文章:

javascript - 无法将变量传递给 Ajax 调用

javascript - 增强的 Javascript for 语句可以安全使用吗?

android - Picasso 使用 HTTP post 加载图像

javascript - 简写 jQuery 将第一个输入集中在 div 中的表单中

javascript - 简单的转换练习,方法不返回正确的值

JavaScript AJAX 传递多个变量的困惑

jquery - CORS post 不适用于 Rails 应用

php - 使用 AJAX 和 JQuery 通过 PHP 进行简单验证

java - 无法从http请求获取JSON

json - 基于JSON的构建工具?