ajax自动完成将数据绑定到文本框

时间:2017-07-21 22:52:22

标签: javascript jquery ajax

从ajax调用获取数据,如何将文本框自动完成的数据与name和id绑定为字段。

如何绑定前端数据并在后端java中获取所选名称的id。

$(document).ready(function() {
$(function() {
        $("#customerName").autocomplete({     
        source : function(request, response) {
        $.ajax({
                url : "/customer/getByNames",
                type : "GET",
                data : {
                        name : $("#customerName").val()
                },
                dataType : "json",
                success : function(data) {

               response(data);
                }
        });
}
});
});
});

<input type="text" id="customerName" name="customerName"
            th:field="*{customer.name}"  />

JSON从ajax调用返回数据(成功的数据)

[ 
{"id": 1,"name": "Customer_01"}, 
{"id": 2,"name": "Customer_02"}, 
{"id": 3,"name": "Customer_03"},
{"id": 4,"name": "Customer_04"} 
] 

需要将JSON的名称字段绑定到文本框作为自动完成

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

您可以将AJAX调用中的数据传递给方法以初始化自动完成插件。

该方法可以具有要初始化的选择器名称,或者如果您的选择器位于数据中,那么您可以将数据映射到要自动完成绑定的选择器数组。

$(document).ready(function()
        $.ajax({
                url : "/customer/getByNames",
                type : "GET",
                data : {
                        name : $("#customerName").val()
                },
                dataType : "json",
                success : function(data) {
                    setAutoComplete(data);
                }
        });
});

function setAutoComplete(data) 
{
    var selectors = ["#someId", "someotherId"];
    //if your selector are in the data then use data.map to get your selectors.
    selectors.forEach(function(selector)
    {
        $(selector).autocomplete({
            source: data
        });
    }
}

如果您的数据具有特殊格式,则可以使用自定义渲染功能初始化自动完成插件。

例如,这允许您使用此JSON设置为formModel将具有类别和字段的自动完成数据分组:

{
   "Contact":{
      "FirstName":"Contact.FirstName",
      "MiddleInitial":"Contact.MiddleInitial",
      "LastName":"Contact.LastName",
      "Address1":"Contact.Address1",
      "Address2":"Contact.Address2",
      "City":"Contact.City",
      "State":"Contact.State",
      "PostalCode":"Contact.PostalCode",
      "WorkPhone":"Contact.WorkPhone",
      "HomePhone":"Contact.HomePhone",
      "Email":"Contact.Email"
   },

   "UDFs":{
      "ModifiedBy":"Contact.UDFs.ModifiedBy",
      "ModifiedDate":"Contact.UDFs.ModifiedDate",
      "SessionId":"Contact.UDFs.SessionId",
      "FormData":"Contact.UDFs.FormData"
   }
}

我使用此代码:

function getFormModel() {
        var availableTags = [];
        for (var category in formModel) {
            var fields = formModel[category];
            for (var field in fields) {
                availableTags.push({ 
                    category: category,
                    label: field, 
                    value: fields[field] });
            }

        }
        return availableTags;
    }

function setAutoComplete(el) {

        $(el).autocomplete({
            source: getFormModel(),
            create: function () {
                //access to jQuery Autocomplete widget differs depending
                //on some jQuery UI versions - you can also try .data('autocomplete')
                $(this).data('uiAutocomplete')._renderMenu = customRenderMenu;
            }
        });
    }

var customRenderMenu = function (ul, items) {
        var self = this;
        var categoryArr = [];

        function contain(item, array) {
            var contains = false;
            $.each(array, function (index, value) {
                if (item == value) {
                    contains = true;
                    return false;
                }
            });
            return contains;
        }

        $.each(items, function (index, item) {
            if (!contain(item.category, categoryArr)) {
                categoryArr.push(item.category);
            }
            console.log(categoryArr);
        });

        $.each(categoryArr, function (index, category) {
            ul.append("<li class='ui-autocomplete-group'>" + category + "</li>");
            $.each(items, function (index, item) {
                if (item.category == category) {
                    self._renderItemData(ul, item);
                }
            });
        });
    };

答案 1 :(得分:0)

最终工作代码:

$(document).ready(function() {
    $(function() {
        $("#customerName").autocomplete({
            source : function(request, response) {
                $.ajax({
                    url : "/customer/getByNames",
                    type : "GET",
                    data : {
                        name : $("#customerName").val()
                    },
                    dataType : "json",
                    success : function(data) {

                        $("#customerName").autocomplete({
                            source : data
                        });
                    },
                    appendTo: "#customerNameResult"

                });
            }

        });
    });
});