Jquery仅自动完成查找“C”
我正在用jquery编写一个自动完成程序,它似乎只找到字母C。我知道为什么会发生这种情况吗?我使用json提要实现的另一个自动完成功能可以正常工作,但这一个需要显示一个排序网格,您可以从第一列信息形状中进行选择。当我输入C时,我会得到下拉列表,但超出该列表的任何组合都不起作用。此外,如果你只是输入L或A,它应该弹出一个选择,但没有这样的运气 JSON Jquery代码Jquery仅自动完成查找“C”,jquery,jquery-ui,jquery-ui-autocomplete,Jquery,Jquery Ui,Jquery Ui Autocomplete,我正在用jquery编写一个自动完成程序,它似乎只找到字母C。我知道为什么会发生这种情况吗?我使用json提要实现的另一个自动完成功能可以正常工作,但这一个需要显示一个排序网格,您可以从第一列信息形状中进行选择。当我输入C时,我会得到下拉列表,但超出该列表的任何组合都不起作用。此外,如果你只是输入L或A,它应该弹出一个选择,但没有这样的运气 JSON Jquery代码 $.getJSON("resources/data/frameshape.json", function(projects)
$.getJSON("resources/data/frameshape.json", function(projects)
{
$( "#frameShaping" ).autocomplete({
source: projects,
select: function( event, ui ) {
$( "#frameShaping" ).val( ui.item.shape );
return false;
}
})
.data( "autocomplete" )._renderItem = function( ul, item ) {
if (ul.children().length == 0){
ul.append( '<li class="t2"><p class="testing">Shape</p>
<p class="testing">Eye</p><p class="testing">Bridge</p>
<p class="testing">Color<p></li>' );
}//end if
return $( "<li></li>" )
.data( "item.autocomplete", item )
.append( "<a><p class='linkage'>"
+ item.shape + "</p><p class='linkage'>"
+ item.eye + " </p><p class='linkage'>"
+ item.bridge + "</p><p class='linkage'> " +
item.color +"</p></a>" )
.appendTo( ul );
};
});
HTML
Autocomplete要求数组中的对象包含标签属性、值属性或两者。为了使其正常工作,您只需将以下属性之一添加到阵列中的对象:
$.getJSON("resources/data/frameshape.json", function(projects) {
$.each(projects, function (i, project) {
project.label = project.shape;
});
$("#frameShaping").autocomplete({
source: projects,
/* other options */
});
});
示例:显然,没有AJAX调用
另一个选项是通过源选项提供您自己的过滤逻辑。如果您不想向源对象添加额外属性,这一选项尤其有用。基本上,您可以提供一个函数,该函数接受请求对象和响应回调,并在函数内部执行任何筛选操作:
$("#frameShaping").autocomplete({
source: function (request, response) {
/* this is also how jQueryUI builds a regex to find candidates internally */
var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
response($.grep(projects, function (value) {
return matcher.test(value.shape);
}));
},
/* etc. */
})
例如:
我建议使用第二个选项,因为它不需要您在初始化小部件之前额外迭代源数组
至于为什么它总是使用C输入,它实际上是用于字符串中的任何字符:[object]
这是因为,jQueryUI是:
例如,从您键入的C输入构建正则表达式
使用接受字符串的RegEx对象的方法
现在,当您向测试方法传递任何内容时,根据RegExp.test的ECMAScript规范,参数将使用toString转换为字符串
所以在这个特殊的例子中,当您获取一个对象并对其调用toString时,您会得到与C匹配的[object object]。因为这对数组中的每个对象都是正确的,所以如果搜索这些字符中的任何一个,实际上都会返回每个项目
下面是一个简单的例子:Autocomplete需要一个数组,其中的对象包含label属性、value属性或两者。为了使其正常工作,您只需将以下属性之一添加到阵列中的对象:
$.getJSON("resources/data/frameshape.json", function(projects) {
$.each(projects, function (i, project) {
project.label = project.shape;
});
$("#frameShaping").autocomplete({
source: projects,
/* other options */
});
});
示例:显然,没有AJAX调用
另一个选项是通过源选项提供您自己的过滤逻辑。如果您不想向源对象添加额外属性,这一选项尤其有用。基本上,您可以提供一个函数,该函数接受请求对象和响应回调,并在函数内部执行任何筛选操作:
$("#frameShaping").autocomplete({
source: function (request, response) {
/* this is also how jQueryUI builds a regex to find candidates internally */
var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
response($.grep(projects, function (value) {
return matcher.test(value.shape);
}));
},
/* etc. */
})
例如:
我建议使用第二个选项,因为它不需要您在初始化小部件之前额外迭代源数组
至于为什么它总是使用C输入,它实际上是用于字符串中的任何字符:[object]
这是因为,jQueryUI是:
例如,从您键入的C输入构建正则表达式
使用接受字符串的RegEx对象的方法
现在,当您向测试方法传递任何内容时,根据RegExp.test的ECMAScript规范,参数将使用toString转换为字符串
所以在这个特殊的例子中,当您获取一个对象并对其调用toString时,您会得到与C匹配的[object object]。因为这对数组中的每个对象都是正确的,所以如果搜索这些字符中的任何一个,实际上都会返回每个项目
下面是一个简单的例子: