jQueryUI自动完成零星行为
下面是我的自动完成代码。问题是它基本上是有效的。假设我有一系列的结果,比如test1、test2、test3等等。如果我输入“t”,它们就会弹出,当我在“te”中输入e时,它们就会消失。如果我加上“s”,它会进一步缩小范围。也不总是第二个字母。这似乎只是零星的。请帮忙。我已经确认返回的数据是可靠的,因此后端没有任何内容jQueryUI自动完成零星行为,jquery,jquery-ui,jquery-ui-autocomplete,Jquery,Jquery Ui,Jquery Ui Autocomplete,下面是我的自动完成代码。问题是它基本上是有效的。假设我有一系列的结果,比如test1、test2、test3等等。如果我输入“t”,它们就会弹出,当我在“te”中输入e时,它们就会消失。如果我加上“s”,它会进一步缩小范围。也不总是第二个字母。这似乎只是零星的。请帮忙。我已经确认返回的数据是可靠的,因此后端没有任何内容 //Server autocomplete $("#txtSearchServer").keyup(function (event) {
//Server autocomplete
$("#txtSearchServer").keyup(function (event) {
$.ajax({
url: 'edit/EditService.svc/SearchServers',
type: 'GET',
data: { 'term': $("#txtSearchServer").val() },
dataType: 'json',
success: function (data) {
var listServers = [];
$.map(data.d, function (item) {
///working here to do server autocomplete!!!!!!!
listServers.push(item.ServerName);
$("#txtSearchServer").autocomplete({
source: listServers
});
});
},
error: function (a, b, c) {
$('.Toast').html('Error Retreiving Servers for autocomplete!');
}
});
});
答案是:这应该能解决问题
编辑:我还想知道为什么你们要动态预取结果,你们不能马上得到完整的列表吗?还是因为数据太多?查看您正在使用asp.net的代码 所以这应该对你有用:
function AutocompleteJSONParse(data) {
var rows = new Array();
var rowData = null;
for (var i = 0, dataLength = data.length; i < dataLength; i++) {
rowData = data[i];
rows[i] = {
value: rowData.ServerName,
label: rowData.ServerName
};
}
return rows;
};
$("#txtSearchServer").autocomplete({
source: function(request, response) {
var pString = '{"term":"' + request.term + '"}';
$.ajax({
url: 'edit/EditService.svc/SearchServers',
type: 'GET',
dataType: "jsond",
type: "POST",
contentType: "application/json",
converters: {
"json jsond": function(msg) {
return msg.hasOwnProperty('d') ? msg.d : msg;
}
},
data: pString,
success: function(data) {
var rows = AutocompleteJSONParse(data);
response(rows);
}
});
},
error: function(a, b, c) {
$('.Toast').html('Error Retreiving Servers for autocomplete!');
},
minLength: 2,
delay: 1000
});
函数自动完成JSONPARSE(数据){
var rows=新数组();
var rowData=null;
对于(var i=0,dataLength=data.length;i
为什么每次ajax成功时,您都会在keyup事件之上启动autocomplete?自动完成应该在你使用它的时候启动一次,所以它是动态的,取决于你输入的内容。每次键入字母时,它都会在文本框中查询webservice的完整值,并返回前10个匹配名称。(注意,我以前从未使用过jquery ui autocomplete…),因此如果我在ajax查询之外启动autocomplete并将源指定为listServers,我所要做的就是更新这个变量,它会自动更新结果?我的意思是,你应该有源代码:listServers,在autocomplete和ajax调用之外定义的listServers,并且在ajax调用成功时更新它。基本上,您已经在输入字段上应用了autocomplete的事件,您正在应用keyup事件,并一直覆盖该变量,通过在每次键控后创建新的自动完成实例。好的,我准确地粘贴了该代码,并且每次键控都会执行返回的查询。好的,但我从未获得自动完成弹出窗口。你能在please中设置你的代码,并在完成后发布链接吗。另外,请看一下这篇文章,说明了如何动态地改变自动完成plgugin的来源。我还更新了我的源代码以反映这一点。我没有准确地测试这段代码,但经过研究,这是我得出的基本结论。ajax调用需要在autocomplete源代码中,这就是我所做的,它可以工作。谢谢asp.net的一个关键元素是转换器。这与较旧的asp.net版本以及较新的版本向后兼容,因此您所转换的(data.d)可以简单地进行转换—它可以检测存在并使其一致。我使用了parse而不是.map,因为它使我能够灵活地在源端使用非常复杂的json对象,并将多个值映射到其他用途,例如。它不会缓存潜在的数据,但是,因为我在数据源中使用了近100000个值,并进行了多项匹配,所以您可能希望这样做。