如何根据下拉选择更改 jquery ui 自动完成源

Posted

技术标签:

【中文标题】如何根据下拉选择更改 jquery ui 自动完成源【英文标题】:How to change jquery ui autocomplete source based on dropdown selection 【发布时间】:2016-07-11 00:40:42 【问题描述】:

我是在我的索引页面的搜索框中使用 jQuery AutoComplete 的初学者:

JS:

<script type="text/javascript">
$(document).ready(function () 
    $('#searchName').autocomplete(
        source: '@Url.Action("GetUsers", "Home")'
    );
);
</script>

html

<div id="searchbox" style="float:left;">@Html.TextBox("searchName", null, new  @placeholder = "Name" )

控制器:

      public JsonResult GetUsers(string term)
  
      Context db = new Context();
      List<string> users;
   .
   .
   .
      return Json(users, JsonRequestBehavior.AllowGet);
  

现在,自动完成功能正在工作,但我的问题是如何连接一个下拉菜单,将自动完成的来源更改为不同的功能,在其中搜索不同的用户集?

换句话说,我需要根据从下拉列表中选择的值更改自动完成功能的来源。

这可能吗?

谢谢!

【问题讨论】:

【参考方案1】:

您可以为源选项指定一个函数:http://api.jqueryui.com/autocomplete/#option-source

使用这种方法,您将更新 javascript,以便您可以更好地控制 GET 调用,从而可以传入第二个参数:

<script type="text/javascript">
$(document).ready(function () 
    $('#searchName').autocomplete(
        source: function (request, response) 
           jQuery.get('@Url.Action("GetUsers", "Home")', 
               term: request.term,
               otherId: $('#otherDdl').val()
           , function (data) 
               response(data);
           );
        
    );
);
</script>

然后在服务器上您可以检查传入的otherId 并根据该更改源。

  public JsonResult GetUsers(string term, int otherId)
  
      Context db = new Context();
      List<string> users;

      if(otherId == ???)
      // Default search
      else
      // Search alternate location

     .
     .
     .
      return Json(users, JsonRequestBehavior.AllowGet);
  

【讨论】:

term 在文本框中输入的字符串是否正确?条件不应该基于下拉列表中的值吗?我明白你在说什么,但是如何将下拉列表中的值注入到 if 语句中? 更新了我的回复以包含选择列表。在我的示例中,选择列表的名称是 'otherDdl' 好的,还有一件事。视图中的 ddl 呢?我需要为此做些什么特别的事情吗? 不,您将像往常一样填充 ddl,然后当用户在“#searchName”中键入内容时,自动完成功能将读取 ddl 选择的值以将其包含在 get 请求中。【参考方案2】:

自动完成 source 接受一个回调函数,使用它根据下拉值构建数据,例如:

    if(dropdown.val() == 1)
       // hard-coded - get from external source
       var data = [ "label": "test1", "value": "test1" ,
                "label": "test2", "value": "test2" ,
                "label": "test3", "value": "test3"  ];
     else
         ....
    

然后在自动完成源中将其分配给响应:

source: function (request, response) 
  response(data);                                        
,

【讨论】:

以上是关于如何根据下拉选择更改 jquery ui 自动完成源的主要内容,如果未能解决你的问题,请参考以下文章

jquery ui 选择菜单自动填充

使用jQuery-UI来实现一个Ajax的自动完成功能(自动填充搜索框的下拉值)

jQuery UI 自动完成鼠标点击选择不传递值

每个单词下方的jQuery-ui自动完成下拉菜单

如何删除/更改 JQuery UI 自动完成助手文本?

jQuery UI自动完成下拉不显示