$.map() 在 .autocomplete() 成功内多次触发
Posted
技术标签:
【中文标题】$.map() 在 .autocomplete() 成功内多次触发【英文标题】:$.map() is firing multiple times inside of an .autocomplete() success 【发布时间】:2017-10-22 12:11:11 【问题描述】:我正在使用 jQuery UI 中的“自动完成”功能在数据库中搜索用户。该脚本正在运行,该程序正在寻找我正在寻找的一切。但是当自动完成菜单出现在搜索字段下方时,所有结果都会出现多次。在寻找问题之后,我可以找到有问题的功能。它是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());
里面)
【问题讨论】:
【参考方案1】:$.map()
返回回调函数返回的所有值的数组。您的回调函数返回整个 availableTagsLabeled
数组,因此 $.map()
返回一个二维数组。您应该一次只返回一个元素。
但看起来您根本不应该映射 JSON 对象。你只需要for
循环来收集所有元素。
并且您对是否有任何要返回的元素的测试应该在循环之外进行。
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);
【讨论】:
非常感谢!这就是解决方案。我没有意识到我不必使用 map()。我让它变得更加复杂,然后我必须这样做。坦克你!以上是关于$.map() 在 .autocomplete() 成功内多次触发的主要内容,如果未能解决你的问题,请参考以下文章
Google Map Api 中的 PlaceAutoComplete
如何测试一个 vue vuetify v-autocomplete
如何针对不同的 AutoComplete 的 ui-autocomplete 定位单个 CSS
如何在反应本机纸张 TextInput 上禁用自动完成功能?在网络上使用 autoComplete="off" 呈现 autocomplete="noop"