jQuery UI 实例 – 自动完成(Autocomplete)

jQuery UI Autocomplete(自动完成)实例

Autocomplete 是 jQuery UI 中非常实用的组件,用于输入框提供智能建议列表,支持本地数据、远程 AJAX 数据、分类显示、自定义渲染等。常用于搜索框、标签输入、地址补全等场景。

官方演示地址:https://jqueryui.com/autocomplete/

下面提供几个渐进实例,从基础到高级,代码使用最新 CDN,可直接复制到 HTML 文件测试。

1. 基础本地数据自动完成

使用数组作为数据源。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>jQuery UI Autocomplete 基础示例</title>
  <link rel="stylesheet" href="//code.jquery.com/ui/1.13.2/themes/smoothness/jquery-ui.css">
  <script src="//code.jquery.com/jquery-3.6.0.min.js"></script>
  <script src="//code.jquery.com/ui/1.13.2/jquery-ui.min.js"></script>
</head>
<body>
  <label>编程语言: </label>
  <input id="autocomplete">

  <script>
    $(function() {
      var languages = [
        "JavaScript", "Java", "Python", "C++", "C#", "PHP", "Ruby", "Go", "Swift", "Kotlin"
      ];
      $("#autocomplete").autocomplete({
        source: languages,
        minLength: 2  // 输入至少2个字符才触发建议
      });
    });
  </script>
</body>
</html>

2. 带标签的对象数据 + 分类显示

使用对象数组,支持 label(显示)和 value(选中后填充值),并实现分类。

<script>
  var data = [
    { label: "JavaScript", category: "前端" },
    { label: "HTML", category: "前端" },
    { label: "CSS", category: "前端" },
    { label: "Java", category: "后端" },
    { label: "Python", category: "后端" },
    { label: "Node.js", category: "后端" }
  ];

  $("#autocomplete").autocomplete({
    source: data,
    minLength: 1,
    // 自定义分类菜单
    _renderMenu: function(ul, items) {
      var that = this;
      var currentCategory = "";
      $.each(items, function(index, item) {
        if (item.category != currentCategory) {
          ul.append("<li class='ui-autocomplete-category'>" + item.category + "</li>");
          currentCategory = item.category;
        }
        that._renderItemData(ul, item);
      });
    }
  });
</script>

<style>
  .ui-autocomplete-category { font-weight: bold; background: #eee; padding: 5px; }
</style>

3. 自定义渲染(带图标或图片)

使用 _renderItem 自定义下拉项显示。

<script>
  $("#autocomplete").autocomplete({
    source: [
      { label: "Apple", icon: "https://via.placeholder.com/30?text=A" },
      { label: "Banana", icon: "https://via.placeholder.com/30?text=B" },
      { label: "Orange", icon: "https://via.placeholder.com/30?text=O" }
    ]
  }).data("ui-autocomplete")._renderItem = function(ul, item) {
    return $("<li>")
      .append("<div><img src='" + item.icon + "' style='width:30px;vertical-align:middle;margin-right:10px;'>" + item.label + "</div>")
      .appendTo(ul);
  };
</script>

4. 远程数据源(AJAX)

从服务器动态获取数据(模拟可用数据)。

<script>
  $("#autocomplete").autocomplete({
    source: function(request, response) {
      $.ajax({
        url: "https://api.example.com/search",  // 替换为你的API
        data: { term: request.term },
        success: function(data) {
          response($.map(data, function(item) {
            return { label: item.name, value: item.id };
          }));
        }
      });
    },
    minLength: 2,
    delay: 300  // 延迟请求,防频繁输入
  });
</script>

5. 事件监听(select、change)

<script>
  $("#autocomplete").autocomplete({
    // ...
    select: function(event, ui) {
      console.log("选中: " + ui.item.label + " (值: " + ui.item.value + ")");
    },
    change: function(event, ui) {
      if (!ui.item) console.log("未从列表中选择");
    }
  });
</script>

小技巧

  • minLength: 0 可实现点击输入框即显示全部建议。
  • 支持多选(Multiple values):查看官方 “Multiple, remote” 示例。
  • 移动端友好,默认支持触摸。

如果你需要 多选标签输入结合 AJAX 从数据库搜索 的完整后端示例,或 带加载动画 的版本,请告诉我更多需求!

文章已创建 4323

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部