$.map() 在 .autocomplete() 成功中多次触发
$.map() is firing multiple times inside of an .autocomplete() success
我正在使用 jQuery UI 中的 "autocomplete" 函数在数据库中搜索用户。脚本正在运行,程序正在寻找我要找的一切。但是当自动完成菜单出现在搜索字段下方时,所有结果都会出现多次。查找问题后,我可以找到有问题的功能。是map()
。也许有人可以帮我解决这个问题。谢谢你!
函数:
<!-- Dynamische Suche -->
$('#suchfeld').autocomplete({
source : function (request, response) {
$.ajax({
type: "POST",
url: "post.php",
data: {
name:'Suchfeldvorschlaege',
value:request.term
},
success: function(json) {
var data = $.parseJSON(json);
var availableTagsLabeled = new Array();
response($.map(data, function () {
if(!data["0_SuchfeldName"]) {
availableTagsLabeled[0] = {label:"Keine Einträge"};
} else {
for(i = 0; i <= data.SuchfeldAnzahl; i++) {
availableTagsLabeled[i] = {label: data[i +"_SuchfeldName"], value: data[i +"_SuchfeldID"]};
}
}
return availableTagsLabeled;
}));
}
})
},
minLength : 3,
select : function(event, ui) {
$('#suchfeld').html(ui.item.label);
$('#suchfeld').attr("data-KundenID", ui.item.value);
return false; },
focus : function(event, ui) {
$(this).val(ui.item.label);
$('#suchfeld').attr("data-KundenID", ui.item.value);
}
});`
(我所有的功能都在 $(document).ready(function(){});
内)
$.map()
returns 由回调函数 return 编辑的所有值的数组。您的回调函数是 returning 整个 availableTagsLabeled
数组,因此 $.map()
是 returning 二维数组。您应该一次 return 一个元素。
但看起来您根本不应该在 JSON 对象上进行映射。您只需要 for
循环来收集所有元素。
并且您对 return 是否有任何元素的测试应该在循环之外完成。
success: function(json) {
var var data = $.parseJSON(json);
var availableTagsLabeled;
if(!data["0_SuchfeldName"]) {
availableTagsLabeled = [{label:"Keine Einträge"}];
} else {
availableTagsLabeled = [];
for(i = 0; i <= data.SuchfeldAnzahl; i++) {
availableTagsLabeled[i] = {label: data[i +"_SuchfeldName"], value: data[i +"_SuchfeldID"]};
}
}
response(availableTagsLabeled);
}
我正在使用 jQuery UI 中的 "autocomplete" 函数在数据库中搜索用户。脚本正在运行,程序正在寻找我要找的一切。但是当自动完成菜单出现在搜索字段下方时,所有结果都会出现多次。查找问题后,我可以找到有问题的功能。是map()
。也许有人可以帮我解决这个问题。谢谢你!
函数:
<!-- Dynamische Suche -->
$('#suchfeld').autocomplete({
source : function (request, response) {
$.ajax({
type: "POST",
url: "post.php",
data: {
name:'Suchfeldvorschlaege',
value:request.term
},
success: function(json) {
var data = $.parseJSON(json);
var availableTagsLabeled = new Array();
response($.map(data, function () {
if(!data["0_SuchfeldName"]) {
availableTagsLabeled[0] = {label:"Keine Einträge"};
} else {
for(i = 0; i <= data.SuchfeldAnzahl; i++) {
availableTagsLabeled[i] = {label: data[i +"_SuchfeldName"], value: data[i +"_SuchfeldID"]};
}
}
return availableTagsLabeled;
}));
}
})
},
minLength : 3,
select : function(event, ui) {
$('#suchfeld').html(ui.item.label);
$('#suchfeld').attr("data-KundenID", ui.item.value);
return false; },
focus : function(event, ui) {
$(this).val(ui.item.label);
$('#suchfeld').attr("data-KundenID", ui.item.value);
}
});`
(我所有的功能都在 $(document).ready(function(){});
内)
$.map()
returns 由回调函数 return 编辑的所有值的数组。您的回调函数是 returning 整个 availableTagsLabeled
数组,因此 $.map()
是 returning 二维数组。您应该一次 return 一个元素。
但看起来您根本不应该在 JSON 对象上进行映射。您只需要 for
循环来收集所有元素。
并且您对 return 是否有任何元素的测试应该在循环之外完成。
success: function(json) {
var var data = $.parseJSON(json);
var availableTagsLabeled;
if(!data["0_SuchfeldName"]) {
availableTagsLabeled = [{label:"Keine Einträge"}];
} else {
availableTagsLabeled = [];
for(i = 0; i <= data.SuchfeldAnzahl; i++) {
availableTagsLabeled[i] = {label: data[i +"_SuchfeldName"], value: data[i +"_SuchfeldID"]};
}
}
response(availableTagsLabeled);
}