$.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

在 Kendo 批量编辑中验证 AutoComplete

如何测试一个 vue vuetify v-autocomplete

如何针对不同的 AutoComplete 的 ui-autocomplete 定位单个 CSS

如何在反应本机纸张 TextInput 上禁用自动完成功能?在网络上使用 autoComplete="off" 呈现 autocomplete="noop"

jQuery.Autocomplete实现自动完成功能(详解)