【问题标题】:Autocomplete show all values自动完成显示所有值
【发布时间】:2016-09-24 12:39:16
【问题描述】:

我很难显示所有可能的自动完成行。 我正在使用 db 来存储所有行。 现在我使用那个脚本:

     <script type="text/javascript">

     $(document).ready(function () {
         $("#Industry").autocomplete({
             source: function (request, response) {
                 $.ajax({
                     url: "/Employee/SuggestWorkExperienceIndustry",
                     type: "POST",
                     dataType: "json",
                     data: { Prefix: request.term },
                     success: function (data) {
                         response($.map(data, function (item) {
                             return { label: item.Industry, value: item.Industry };
                         }))

                     }
                 })
             },
             messages: {
                 noResults: "failure", results: ""
             }
         });
     });
</script>  

控制器部分:

  [HttpPost]
    public JsonResult SuggestWorkExperienceIndustry(string Prefix)
    {
        using (var db = new HRMEntities())
        {
            var industryList = db.WorkExperienceIndustries.ToList();

            var industry = (from n in industryList
                              where n.Industry.ToLower().Contains(Prefix.ToLower())
                              select new { n.Industry });

            return Json(industry, JsonRequestBehavior.AllowGet);
        }
    }

效果很好,但我不知道当用户点击字段时如何从数据库中获取所有行。

【问题讨论】:

  • 用户点击字段时是否会发生请求?如果有,Prefix 的值是多少?
  • @Andrei 不,请求没有发生。如果它发生了,我会检查 Prefix 是否为 null 并将所有值从 db 设置为 industry,仅此而已。

标签: javascript jquery asp.net asp.net-mvc autocomplete


【解决方案1】:

自动完成小部件minLength 中有一个property,默认设置为1。这意味着您需要在文本框中输入至少一个字符才能开始请求数据。将其设置为0,它应该会立即加载整个列表:

minLength: 0

但请确保这是您真正想要的行为,因为它确实会加载您的所有项目。可能对用户不太友好。

更新。 似乎没有内置的方式来触发仅在焦点上的搜索。但是手动触发真的很简单:

$("#Industry").autocomplete({
    source: ...
    messages: ...
    minLength: 0
}).focus(function () {
    $(this).autocomplete("search");
});

【讨论】:

  • 谢谢@Andrei,它部分解决了我的问题。现在完整列表已上传,但不是在单击时立即上传,我必须输入 smtng 并将其删除,以便发送长度为 0 的请求。是否可以在不执行其他操作的情况下进行点击?
  • @GeekyNuns,部分?另一部分是什么?
  • 刚按回车,所以评论未完成。
  • @GeekyNuns,我明白了。更新
【解决方案2】:

为了让有相同问题的人更快。 最终脚本应如下所示:

<script type="text/javascript">

     $(document).ready(function () {
         $("#VarName").autocomplete({

             source: function (request, response) {
                 $.ajax({
                     url: "/ControllerName/ActionName",
                     type: "POST",
                     dataType: "json",
                     data: { Prefix: request.term },

                     success: function (data) {
                         response($.map(data, function (item) {
                             return { label: item.VarName, value: item.VarName};
                         }))

                     }
                 })
             },
             messages: {
                 noResults: "failure", results: ""
             },
             minLength: 0,
         }).focus(function () {
             $(this).autocomplete("search")});
     });
</script>  

【讨论】:

    猜你喜欢
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多