【问题标题】:Displaying array value based on a certain array key as a user type in a text field在文本字段中显示基于某个数组键的数组值作为用户类型
【发布时间】:2015-02-03 22:27:57
【问题描述】:

我查看了Display partial array value matches from user input 并尝试获得相同的结果。

区别在于数组格式。我希望搜索文本值与数组键 name 匹配。

无论我在文本字段中输入什么内容,它都会显示“未找到匹配项!”我永远无法显示这些名字。似乎 players[x].name.indexOf() 无法识别。如何显示名称?

这里是Fiddle

    var players = [
                { "id" : "23012",
                  "name" : "Scott",
                  "first" : "Stve",
                  "last" : "Scott" },
                { "id" : "22904",
                  "name" : "Phillips, A",
                  "first" : "Adam",
                  "last" : "Phillips"},
                { "id" : "45783",
                  "name" : "Phillips, T",
                  "first" : "Tom",
                  "last" : "Phillips" },
                { "id" : "54762",
                  "name" : "Scobery",
                  "first" : "Don",
                  "last" : "Scobery" },
                { "id" : "78903",
                  "name" : "Phillip",
                  "first" : "Roger",
                  "last" : "Phillip"}
              ]

$("#searchField").on("keyup", function() {

    $(".append").empty();
    if($("#searchField").val() != ""){

        for(var x = 0; x < players.length; x++){
            if(players[x].name.indexOf(($("#searchField").val()).toLowerCase()) == 0){
               $(".append").append(players[x].name+"<br>");
             } else {
              $(".append").html("no match found!");
             }
        }
    }
});

【问题讨论】:

    标签: javascript jquery arrays


    【解决方案1】:

    Update Fiddle

    您将在第一次否定搜索时覆盖所有搜索结果。 因为您附加了附加结果,所以起初没有找到您使用 .html() 指令杀死所有附加的子项。 就是那个错误。 我不确定您的 toLowerCase 用法,但这是另一回事。

        var players = [{
        "id": "23012",
            "name": "Scott",
            "first": "Stve",
            "last": "Scott"
    }, {
        "id": "22904",
            "name": "Phillips, A",
            "first": "Adam",
            "last": "Phillips"
    }, {
        "id": "45783",
            "name": "Phillips, T",
            "first": "Tom",
            "last": "Phillips"
    }, {
        "id": "54762",
            "name": "Scobery",
            "first": "Don",
            "last": "Scobery"
    }, {
        "id": "78903",
            "name": "Phillip",
            "first": "Roger",
            "last": "Phillip"
    }]
    
    $("#searchField").on("keyup", function () {
        var found = false;
        $(".append").empty();
        if ($("#searchField").val() != "") {
    
            for (var x = 0; x < players.length; x++) {
                if (players[x].name.indexOf($("#searchField").val()) >= 0) {
                    found = true;
                    $(".append").append(players[x].name + "<br>");
                }
            }
            if (!found) {
               $(".append").html("no match found");
            }
        }
    }); // searchField on
    

    让搜索完全不区分大小写:

    if (players[x].name.toLowerCase().indexOf($("#searchField").val().toLowerCase()) == 0)
    

    垃圾邮件小写。 (对象和输入)

    【讨论】:

    • 感谢您的快速回答和清晰的解释!这就是我需要的。 toLowerCase 用于使搜索词不区分大小写。
    • 我评论得太早了。文本字段中的第一个字母很好地显示了搜索结果。但是,在第二个字母之后,它显示“找不到匹配项!”除非我输入的内容与数组值完全相同。我怎样才能使它完全不区分大小写?
    • 编辑了最适合的答案。只需添加更多小写字母。并考虑 indexOf 返回 0 或 "> 0" 以在名称内进行搜索。
    猜你喜欢
    • 2017-11-14
    • 2014-04-08
    • 2019-08-19
    • 2013-04-06
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 2017-07-09
    • 1970-01-01
    相关资源
    最近更新 更多