Jquery-ui自动完成没有显示Drop Down

时间:2018-02-22 00:27:29

标签: jquery ajax autocomplete

我意识到这个问题已被多次询问(我全部都读了)但我仍然无法让我的工作。我正在使用jquery-ui自动完成功能,除了从文本输入中删除任何内容之外,一切看起来都完美无缺。

HTML:

<input type="text" id="CustSearchText" />

控制器:

[HttpGet]
public JsonResult Search_auto_complete(string search_name, string search_type)
{
    if (search_name != null)
    {
        var db = new EDM_Customer();
        var customerItems = from cI in db.customer
                            select cI;

        if (search_type == "startsWith")
        {
            customerItems = customerItems.Where(cst => cst.cust_nm.Trim().ToLower().StartsWith(search_name.ToLower()));
        }
        else //contains
        {
            customerItems = customerItems.Where(cst => cst.cust_nm.Trim().ToLower().Contains(search_name.ToLower()));
        }

        var matches = (from c in customerItems 
                       select new
                       {
                           cust_nm = c.cust_nm
                       }).Take(5).ToList();

        return Json(matches, JsonRequestBehavior.AllowGet);
    }
    else
    {
        return null;
    }
}

使用Javascript:

$("#CustSearchText").unbind().autocomplete({
        source: function (request, search_type, response) {
            search_type = $(".radio_label input[name=searchType]:checked").val();
            $.ajax({
                url: "/Customer/Search_auto_complete",
                //type: "GET",
                dataType: "json",
                //contentType: "application/json",
                data: { search_name: request.term, search_type: search_type },
                success: function (data) {
                    response($.map(data, function (item) {
                        //alert(item.cust_nm);
                        return {
                            label: item.cust_nm
                        };
                    }));
                },
                error: function (response) {
                    alert("Err: " + response.responseText);
                },
                failure: function (response) {
                    alert("Failure: " + response.responseText);
                }
            });
        },
        select: function (e, i) {
            $("#CustSearchText").val(i.item.Value);
        },
        minLength: 1
    });

Getting this in the console debugger

如果我在js中取消注释alert(item.cust_nm),它将一次显示所有匹配的记录。但是,从我的文本框中删除的内容永远不会出现。这就像回归不起作用。

任何有关错误的线索都将不胜感激。

1 个答案:

答案 0 :(得分:1)

//...
response($.map(data, function (item) {
                        //alert(item.cust_nm);
                        return {
                            label: item.cust_nm
                        };
                    }));
//...

您尚未将response定义为函数。也许有点明显,但那是错的。我认为你本可以放response[/*...*/]。 我不确定它有什么问题。我只知道它出错了。也许你定义了一个函数response?如果是这样,您需要更改变量名称或更改函数名称。