jquery使用json和第一个字符匹配从文件自动完成

时间:2012-12-25 15:26:38

标签: jquery json jquery-ui jquery-autocomplete

我有一个文本文件,其中包含简单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自动完成文档,它不起作用。我不知道在tags变量中放置什么。在文档中,他们使用硬编码标签变量(如var tags = [“c ++”,“java”,“php”,“coldfusion”,“javascript”,“asp”,“ruby”];)但我有一个类似的文件1600多个名字,我不想像我们建议的那样把它放在我的HTML代码中。

2 个答案:

答案 0 :(得分: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);
            }));
        }
    });
})

答案 1 :(得分:0)

我认为你需要设置jQuery Autocomplete插件的minChars选项。请尝试以下

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 );
        }) );
    }
});

您可以详细了解如何使用自动填充功能及其选项here.

更新

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

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});
});