代码之家  ›  专栏  ›  技术社区  ›  Robin Maben

jquery自动完成结果中出现的jquery用户界面图标

  •  1
  • Robin Maben  · 技术社区  · 14 年前

    我用的是 jQuery Autocomplete Plugin (由jquery fame的jrn zaeffer编写)。

    后端代码:

    public JsonResult GetCompanyNames()
        {
            return Json(Model.CompanyNames); //returns valid JSon
        }
    

    相关JS代码:

    $('#CompanyName').autocomplete(['Suzuki', 'Honda', 'blah']); //This works fine
    $('#CompanyName').autocomplete('/Account/Login/GetCompanyNames'); //This renders icons!
    

    当把一个javascript数组作为url/data参数传递时,它可以像预期的那样正常工作。

    但当我通过 Area/Controller/Action 作为参数,它显示了jquery的UI图标(哈?)在相应的文本框中!???

    是的,我希望能附上一张截图。相信我,我也不敢相信自己的眼睛。

    在调试时,我已经验证了我的方法返回的有效性 JsonResult 数据。我使用的是:asp.net mvc3,jquery 1.4.2。我在Chrome6.0、IE8和Firefox3.5中发现了相同的行为。

    更新:图标出现在服务器返回自动完成请求之前。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Darin Dimitrov    14 年前

    确保允许GET请求:

    public ActionResult GetCompanyNames()
    {
        return Json(Model.CompanyNames, JsonRequestBehavior.AllowGet);
    }
    

    另一个提示:使用 FireBug 查看客户机和服务器之间正在交换的内容以及任何可能的错误消息。


    更新:

    问题来自这样一个事实:您需要使用 parse formatItem 函数,因为插件希望以特殊方式格式化数据:

    $('#CompanyName').autocomplete('/Account/Login/GetCompanyNames', {
        dataType: 'json',
        formatItem: function (data, i, max, value, term) {
            return value;
        },
        parse: function (data) {
            return $.map(data, function (item) {
                return { data: item, value: item, result: item };
            });
        }
    });