我有一个文本文件,其中包含简单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代码中。
答案 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});
});