0

我有一个文本文件,其中包含简单 json 格式的名称(没有标题):[“Name1”,“Name2”,“Name3”,(...)]

我的带有自动完成输入表单的 html 页面有这个 jquery 脚本:

var tags = "\path\to\jsontxtfile.txt";

$( "#id_name" ).autocomplete({ 
source: function( request, response ) {
        var matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( request.term ), "i" );
        response( $.grep( tags, function( item ){
            return matcher.test( item );
        }) );
    }
});

当我使用正常的自动完成时,我只是将我的文件的路径放在没有函数的源中(来源:“\path\to\jsontxtfile.txt”)并且它工作得很好,但是当我尝试只使用来自 jquery 自动完成的第一个字母匹配时文档它不起作用。我不知道在标签变量中放置什么。在文档中,他们使用硬编码的标签变量(如 var tags = [“c++”、“java”、“php”、“coldfusion”、“javascript”、“asp”、“ruby”];)但我有一个文件1600 多个名字,我不想像他们建议的那样把它放在我的 html 代码中。

4

2 回答 2

1

您的代码永远不会从服务器检索文件。var tags只是一个代表路径的字符串。但是您试图解析tags为好像它是该文件中包含的数据数组

一个非常简单的解决方案是将文件包含在页面的脚本标记中

<script src="\path\to\jsontxtfile.txt"></script>

这将需要您在文件中实际创建一个变量来定义它包含的数组。在文件的最开始添加var tags=

一旦包含它,您就可以tags在代码中访问该数组。

如果这不是一个可行的解决方案,您还可以使用 AJAX 来检索文件:

/* retrieve file*/
$.getJSON("\path\to\jsontxtfile.txt", function(tags) {
    /* data now available, initialize autocomplete*/
    $("#id_name").autocomplete({
        source: function(request, response) {
            var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term), "i");
            response($.grep(tags, function(item) {
                return matcher.test(item);
            }));
        }
    });
})
于 2012-12-25T15:48:44.377 回答
0

我认为您需要设置minCharsjQuery Autocomplete 插件的选项。尝试以下

var tags = "\path\to\jsontxtfile.txt";

$( "#id_name" ).autocomplete({ 
minChars: 1,
source: function( request, response ) {
        var matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( request.term ), "i" );
        response( $.grep( tags, function( item ){
            return matcher.test( item );
        }) );
    }
});

您可以在此处阅读有关如何使用自动完成功能及其选项的更多信息。

更新

您可以编写一个方法来从文本文件创建一个数组:

function get_suggestions(){
    $.get("/path/to/jsontxtfile.txt", { }, function(data){
        var data_array = eval(data);
        data_array = data;
    });
}

然后将其用作以下内容:

$(document).ready(function(){
    var autocomplete_opts = get_suggestions();
    $( "#id_name" ).autocomplete({ minChars: 1, source: autocmplete_opts});
});
于 2012-12-25T15:41:01.290 回答