# @easyops-cn/autocomplete\.js 中文文档

规范地址：https://npmcn.com/package/%40easyops-cn/autocomplete.js/

版本：0\.38\.1
npm 元数据更新时间：2026-05-08T03:25:27.161Z
中文译文更新时间：2026-11-13T04:12:43.977Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40easyops-cn/autocomplete.js
原文对照：https://npmcn.com/package/%40easyops-cn/autocomplete.js/?lang=original
项目主页：https://github.com/easyops-cn/autocomplete.js
源码仓库：https://github.com/easyops-cn/autocomplete.js

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：799 kB，72 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- 运行依赖：2 个
- 首次发布：2020-11-05T04:12:35.586Z
- 最新版本发布：2020-11-05T04:12:36.028Z
- 近 30 天下载量：1896016（2026-10-13 至 2026-11-11，npm 官方下载统计）
- 已发布版本数：1（近 12 个月 0 个）

## 中文简介

快速和全功能自动完成库

## 安装

```sh
npm install @easyops-cn/autocomplete.js
```

也可以使用：`pnpm add @easyops-cn/autocomplete.js`、`yarn add @easyops-cn/autocomplete.js`、`bun add @easyops-cn/autocomplete.js`

## README

# 自动完成.js

这个 JavaScript 库在您的搜索框中添加了快速而全功能的自动补全菜单,显示“ 按您输入” 的结果 。 它很容易与阿尔戈利亚的实时搜索引擎结合. 该库作为jQuery插件,Angular.js指令或独立库提供.

[![build status](https://travis-ci.org/algolia/algoliasearch-client-node.svg?branch=master)](http://travis-ci.org/algolia/autocomplete.js) [![NPM version](https://badge.fury.io/js/autocomplete.js.svg)](http://badge.fury.io/js/autocomplete.js) [![Coverage Status](https://coveralls.io/repos/algolia/autocomplete.js/badge.svg?branch=master)](https://coveralls.io/r/algolia/autocomplete.js?branch=master) [![jsDelivr Hits](https://data.jsdelivr.com/v1/package/npm/autocomplete.js/badge?style=rounded)](https://www.jsdelivr.com/package/npm/autocomplete.js) ![jQuery](https://img.shields.io/badge/jQuery-OK-blue.svg) ![Zepto.js](https://img.shields.io/badge/Zepto.js-OK-blue.svg) ![Angular.js](https://img.shields.io/badge/Angular.js-OK-blue.svg) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

[![Browser tests](https://saucelabs.com/browser-matrix/opensauce-algolia.svg)](https://saucelabs.com/u/opensauce-algolia)

## 目录

-   [特征](https://npmcn.com/package/%40easyops-cn/autocomplete.js/#readme-features)
-   [安装](https://npmcn.com/package/%40easyops-cn/autocomplete.js/#readme-installation)
    -   [日记](https://npmcn.com/package/%40easyops-cn/autocomplete.js/#readme-jsdelivr)
    -   [(简体中文)](https://npmcn.com/package/%40easyops-cn/autocomplete.js/#readme-cdnjs)
    -   [无](https://npmcn.com/package/%40easyops-cn/autocomplete.js/#readme-npm)
    -   [鲍尔](https://npmcn.com/package/%40easyops-cn/autocomplete.js/#readme-bower)
    -   [来源值/](https://npmcn.com/package/%40easyops-cn/autocomplete.js/#readme-source-dist)
    -   [浏览器](https://npmcn.com/package/%40easyops-cn/autocomplete.js/#readme-browserify)
-   [使用量](https://npmcn.com/package/%40easyops-cn/autocomplete.js/#readme-usage)
    -   [独立](https://npmcn.com/package/%40easyops-cn/autocomplete.js/#readme-standalone)
    -   [查询](https://npmcn.com/package/%40easyops-cn/autocomplete.js/#readme-jquery)
    -   [Angular.JS (英语)](https://npmcn.com/package/%40easyops-cn/autocomplete.js/#readme-angularjs)
-   [看和感觉](https://npmcn.com/package/%40easyops-cn/autocomplete.js/#readme-look-and-feel)
-   [全球选项](https://npmcn.com/package/%40easyops-cn/autocomplete.js/#readme-global-options)
-   [数据集](https://npmcn.com/package/%40easyops-cn/autocomplete.js/#readme-datasets)
-   [来源](https://npmcn.com/package/%40easyops-cn/autocomplete.js/#readme-sources)
    -   [点击数](https://npmcn.com/package/%40easyops-cn/autocomplete.js/#readme-hits)
    -   [("xxxxx in yyyyy") (中文(简体) )](https://npmcn.com/package/%40easyops-cn/autocomplete.js/#readme-popularin-aka-xxxxx-in-yyyyy)
    -   [自定义源](https://npmcn.com/package/%40easyops-cn/autocomplete.js/#readme-custom-source)
-   [警卫](https://npmcn.com/package/%40easyops-cn/autocomplete.js/#readme-security)
    -   [用户生成的数据: 防范 XSS](https://npmcn.com/package/%40easyops-cn/autocomplete.js/#readme-user-generated-data-protecting-against-xss)
-   [财务问题](https://npmcn.com/package/%40easyops-cn/autocomplete.js/#readme-faq)
    -   [我怎么会 `Control`\- 点击结果,然后在新的标签中打开?](https://npmcn.com/package/%40easyops-cn/autocomplete.js/#readme-how-can-i-control-click-on-results-and-have-them-open-in-a-new-tab)
-   [活动](https://npmcn.com/package/%40easyops-cn/autocomplete.js/#readme-events)
-   [API 密码](https://npmcn.com/package/%40easyops-cn/autocomplete.js/#readme-api)
    -   [查询](https://npmcn.com/package/%40easyops-cn/autocomplete.js/#readme-jquery-1)
    -   [独立](https://npmcn.com/package/%40easyops-cn/autocomplete.js/#readme-standalone-1)
-   [贡献和释放](https://npmcn.com/package/%40easyops-cn/autocomplete.js/#readme-contributing--releasing)
-   [贷项](https://npmcn.com/package/%40easyops-cn/autocomplete.js/#readme-credits)

## 特征

-   向终端用户输入时显示建议
-   显示顶端建议作为提示(即背景文本)
-   支持允许用户界面灵活性的自定义模板
-   与RTL语言和输入法编辑器合作良好
-   触发自定义事件

## 安装

这个 `autocomplete.js` 必须包含库 **之后** jQuery, Zepto 或 Angular.js (带有 jQuery). 否则,它会使用嵌入的Zepto.

### 日记

```html
<script src="https://cdn.jsdelivr.net/autocomplete.js/0/autocomplete.min.js"></script>
<!-- OR -->
<script src="https://cdn.jsdelivr.net/autocomplete.js/0/autocomplete.jquery.min.js"></script>
<!-- OR -->
<script src="https://cdn.jsdelivr.net/autocomplete.js/0/autocomplete.angular.min.js"></script>
```

### (简体中文)

```html
<script src="https://cdnjs.cloudflare.com/ajax/libs/autocomplete.js/<VERSION>/autocomplete.min.js"></script>
<!-- OR -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/autocomplete.js/<VERSION>/autocomplete.jquery.min.js"></script>
<!-- OR -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/autocomplete.js/<VERSION>/autocomplete.angular.min.js"></script>
```

### 无

```sh
npm install --save autocomplete.js
```

### 鲍尔

```sh
bower install algolia-autocomplete.js -S
```

### 来源值/

您可以在 [点/](https://github.com/algolia/autocomplete.js/tree/master/dist)。 。 。 .

### 浏览器

你可以需要它和使用它 [浏览器](http://browserify.org/)数字 :

```js
var autocomplete = require('autocomplete.js');
```

## 使用量

### 独立

1.  包含 `autocomplete.min.js`
2.  初始化自动补全菜单 `autocomplete` 函数

**3⁄4 ̄ ̧漯B**数字 : `autocomplete.js` 与框外的最新版本 algoliasearch v4 兼容, 但是您可以自己像这样创建兼容源 :

```html
<input type="text" id="search-input" placeholder="Search unicorns..." />

<!-- [ ... ] -->
<script src="https://cdn.jsdelivr.net/npm/algoliasearch@4/dist/algoliasearch.umd.min.js"></script>
<script src="https://cdn.jsdelivr.net/autocomplete.js/0/autocomplete.min.js"></script>
<script>
  var client = algoliasearch('YourApplicationID', 'YourSearchOnlyAPIKey');
  var index = client.initIndex('YourIndex');

  function newHitsSource(index, params) {
    return function doSearch(query, cb) {
      index
        .search(query, params)
        .then(function(res) {
          cb(res.hits, res);
        })
        .catch(function(err) {
          console.error(err);
          cb([]);
        });
    };
  }

  autocomplete('#search-input', { hint: false }, [
    {
      source: newHitsSource(index, { hitsPerPage: 5 }),
      displayKey: 'my_attribute',
      templates: {
        suggestion: function(suggestion) {
          return suggestion._highlightResult.my_attribute.value;
        }
      }
    }
  ]).on('autocomplete:selected', function(event, suggestion, dataset, context) {
    console.log(event, suggestion, dataset, context);
  });
</script>
```

### 查询

1.  包含 `autocomplete.jquery.min.js` 包含之后 `jQuery`
2.  初始化自动补全菜单 `autocomplete` j 查询插件

**3⁄4 ̄ ̧漯B**数字 : `autocomplete.js` 不符合最新版本的 algoliasearch v4, 因此我们强烈建议您使用以下代码片断中指定的 algoliasearch v3 .

```html
<input type="text" id="search-input" />

<!-- [ ... ] -->
<script src="https://cdn.jsdelivr.net/algoliasearch/3/algoliasearch.min.js"></script>
<script src="https://cdn.jsdelivr.net/autocomplete.js/0/autocomplete.jquery.min.js"></script>
<script>
  var client = algoliasearch('YourApplicationID', 'YourSearchOnlyAPIKey')
  var index = client.initIndex('YourIndex');
  $('#search-input').autocomplete({ hint: false }, [
    {
      source: $.fn.autocomplete.sources.hits(index, { hitsPerPage: 5 }),
      displayKey: 'my_attribute',
      templates: {
        suggestion: function(suggestion) {
          return suggestion._highlightResult.my_attribute.value;
        }
      }
    }
  ]).on('autocomplete:selected', function(event, suggestion, dataset, context) {
    console.log(event, suggestion, dataset, context);
  });
</script>
```

### Angular.JS (英语)

1.  包含 `autocomplete.angular.min.js` 包含之后 `jQuery` 打开 `Angular.js`
2.  输入 `algolia.autocomplete` 模块
3.  添加数据 `autocomplete`, (中文(简体) ), `aa-datasets` 选项 `aa-options` 属性到搜索栏

**3⁄4 ̄ ̧漯B**数字 : `autocomplete.js` 不符合最新版本的 algoliasearch v4, 因此我们强烈建议您使用以下代码片断中指定的 algoliasearch v3 .

```html
<div ng-controller="yourController">
  <input type="text" id="search-input" autocomplete aa-datasets="getDatasets()" />
</div>

<!-- [ include jQuery + Angular.js ] -->
<script src="https://cdn.jsdelivr.net/algoliasearch/3/algoliasearch.angular.min.js"></script>
<script src="https://cdn.jsdelivr.net/autocomplete.js/0/autocomplete.angular.min.js"></script>
<script>
  angular.module('myApp', ['algoliasearch', 'algolia.autocomplete'])
    .controller('yourController', ['$scope', 'algolia', function($scope, algolia) {
      var client = algolia.Client('YourApplicationID', 'YourSearchOnlyAPIKey');
      var index = client.initIndex('YourIndex');

      $scope.getDatasets = function() {
        return {
          source: algolia.sources.hits(index, { hitsPerPage: 5 }),
          displayKey: 'my_attribute',
          templates: {
            suggestion: function(suggestion) {
              return suggestion._highlightResult.my_attribute.value;
            }
          }
        };
      };

      $scope.$on('autocomplete:selected', function(event, suggestion, dataset) {
        console.log(event, suggestion, dataset, context);
      });
    }]);
</script>
```

**说明:** 你需要依赖 `jQuery`,嵌入于Angular.js的lite版本不会成功.

## 看和感觉

下面是描述自动完成的 DOM 结构的 faux 胡子模板 下放菜单。 记住 `header`, (中文(简体) ), `footer`, (中文(简体) ), `suggestion`,以及 `empty` 来源于提供的详细模板 [这里](https://npmcn.com/package/%40easyops-cn/autocomplete.js/#readme-datasets)。 。 。 .

```html
<span class="aa-dropdown-menu{{#datasets}} aa-{{'with' or 'without'}}-{{name}}{{/datasets}}">
  {{#datasets}}
    <div class="aa-dataset-{{name}}">
      {{{header}}}
      <span class="aa-suggestions">
        {{#suggestions}}
          <div class="aa-suggestion">{{{suggestion}}}</div>
        {{/suggestions}}
        {{^suggestions}}
          {{{empty}}}
        {{/suggestions}}
      </span>
      {{{footer}}}
    </div>
  {{/datasets}}
  {{empty}}
</span>
```

当最终用户鼠标或按键超过一个时 `.aa-suggestion`,阶级 `aa-cursor` 将加入其中。 您可以使用此类作为钩子来设计“ 光标下” 建议状态 .

添加以下 CSS 规则添加默认样式 :

```css
.algolia-autocomplete {
  width: 100%;
}
.algolia-autocomplete .aa-input, .algolia-autocomplete .aa-hint {
  width: 100%;
}
.algolia-autocomplete .aa-hint {
  color: #999;
}
.algolia-autocomplete .aa-dropdown-menu {
  width: 100%;
  background-color: #fff;
  border: 1px solid #999;
  border-top: none;
}
.algolia-autocomplete .aa-dropdown-menu .aa-suggestion {
  cursor: pointer;
  padding: 5px 4px;
}
.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor {
  background-color: #B2D7FF;
}
.algolia-autocomplete .aa-dropdown-menu .aa-suggestion em {
  font-weight: bold;
  font-style: normal;
}
```

这就是 [基本实例](https://github.com/algolia/autocomplete.js/tree/master/examples) 看起来像:

![Basic example](https://npmcn.com/package/%40easyops-cn/autocomplete.js/examples/basic.gif)

## 全球选项

初始化自动完成时,您可以配置一些全局选项 .

-   `autoselect` - 如果 `true`中的第一个建议将自动拥有 `cursor` 类,和按 `<ENTER>` 将选择它.
    
-   `autoselectOnBlur` - 如果 `true`,当输入模糊时,在下拉时第一个给出的建议将自动拥有 `cursor` 类,和按 `<ENTER>` 将选择它。 此选项应在移动时使用, 参见 [113号](https://github.com/algolia/autocomplete.js/issues/113)
    
-   `tabAutocomplete` - 如果 `true`,按下选项卡将选择下拉中的第一个建议。 默认为 `true`。 。 。 .
    
-   `hint` - 如果 `false`,自动完成不会显示提示。 默认为 `true`。 。 。 .
    
-   `debug` - 如果 `true`,自动完成不会关闭 `blur`默认为 `false`。 。 。 .
    
-   `clearOnSelected` - 如果 `true`,当选择建议时,自动完成将清空搜索框。 如果您想要使用此选项作为输入标记的方式, 则此选项很有用 `selected` 活动.
    
-   `openOnFocus` - 如果 `true`,当输入被聚焦时,下拉菜单会打开。 默认为 `false`。 。 。 .
    
-   `appendTo` – 如果设置了 DOM 选择器,则不包入输入并附加与选择器相匹配的第一个 DOM 元素的包和下放菜单. 它会自动地将包装放入输入下,并设置到与输入相同的宽度. 无法使用 `hint: true`,因为 `hint` 需要包围输入的包装.
    
-   `dropdownMenuContainer` – 如果设置了 DOM 选择器, 它会覆盖下放菜单的容器 .
    
-   `templates` ——可选散列凌驾于默认模板之上.
    
    -   `dropdownMenu` – 下放菜单模板. 模板应包括所有 _数据集_ 占位符 .
    -   `header` — 预留到下拉菜单的页眉
    -   `footer` — 将页脚附加到下拉菜单
    -   `empty` – 当没有数据集返回结果时显示的模板 。 诱导功能 其上下文包含 `query`。 。 。 .
-   `cssClasses` ——可选散列凌驾于默认的cs类.
    
    -   `root` ——根类. 默认为 `algolia-autocomplete`。 。 。 .
    -   `prefix` – 所有嵌入元素的 CSS 类前缀 。 默认为 `aa`。 。 。 .
    -   `noPrefix` - 如果您不想使用任何前缀, 请将此设定为真实 。 如果没有这个选项,所有嵌入式元素类都会有一个前缀. 默认为 `false`。 。 。 .
    -   `dropdownMenu` – 降级菜单CSS类. 默认为 `dropdown-menu`。 。 。 .
    -   `input` – 输入 CSS 类. 默认为 `input`。 。 。 .
    -   `hint` - 提示CSS课。 默认为 `hint`。 。 。 .
    -   `suggestions` – 建议列出CSS类. 默认为 `suggestions`。 。 。 .
    -   `suggestion` – 建议包装 CSS 类. 默认为 `suggestion`。 。 。 .
    -   `cursor` - 光标 CSS 类。 默认为 `cursor`。 。 。 .
    -   `dataset` – 数据集CSS类. 默认为 `dataset`。 。 。 .
    -   `empty` - 空CSS课。 默认为 `empty`。 。 。 .
-   `keyboardShortcuts` - 用于集中输入的快捷键。 例如,如果想要绑定 `s` 财务报告和审定财务报表 `/` 您可以指定 : `keyboardShortcuts: ['s', '/']`
    
-   `ariaLabel` - 一个可选的字符串,将包含 `aria-label` 属性.
    

```html
<script type="text/template" id="my-custom-menu-template">
  <div class="my-custom-menu">
    <div class="row">
      <div class="col-sm-6">
        <div class="aa-dataset-d1"></div>
      </div>
      <div class="col-sm-6">
        <div class="aa-dataset-d2"></div>
        <div class="aa-dataset-d3"></div>
      </div>
    </div>
  </div>
</script>
<style>
body {
    font-family: -apple-system, sans-serif;
}
.algolia-autocomplete {
  width: 100%;
}
.algolia-autocomplete .aa-input, .algolia-autocomplete .aa-hint {
  width: 100%;
}
.algolia-autocomplete .aa-hint {
  color: #999;
}
.algolia-autocomplete .aa-dropdown-menu {
  width: 100%;
  background-color: #fff;
  border: 1px solid #999;
  border-top: none;
}
.algolia-autocomplete .aa-dropdown-menu .aa-suggestion {
  cursor: pointer;
  padding: 5px 4px;
}
.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor {
  background-color: #B2D7FF;
}
.algolia-autocomplete .aa-dropdown-menu .aa-suggestion em {
  font-weight: bold;
  font-style: normal;
}

.branding {
font-size: 1.3em;
margin: 0.5em 0.2em;
}

.branding img {
    height: 1.3em;
    margin-bottom: - 0.3em;
}
</style>
<script>
  $('#search-input').autocomplete(
    {
      templates: {
        dropdownMenu: '#my-custom-menu-template',
        footer: '<div class="branding">Powered by <img src="https://www.algolia.com/static_assets/images/press/downloads/algolia-logo-light.svg" /></div>'
      }
    },
    [
      {
        source: $.fn.autocomplete.sources.hits(index1, { hitsPerPage: 5 }),
        name: 'd1',
        templates: {
          header: '<h4>List 1</h4>',
          suggestion: function(suggestion) {
            // FIXME
          }
        }
      },
      {
        source: $.fn.autocomplete.sources.hits(index2, { hitsPerPage: 2 }),
        name: 'd2',
        templates: {
          header: '<h4>List 2</h4>',
          suggestion: function(suggestion) {
            // FIXME
          }
        }
      },
      {
        source: $.fn.autocomplete.sources.hits(index3, { hitsPerPage: 2 }),
        name: 'd3',
        templates: {
          header: '<h4>List 3</h4>',
          suggestion: function(suggestion, answer) {
            // FIXME
          }
        }
      }
    ]
  );
</script>
```

-   `minLength` - 建议开始前所需的最小字符长度 {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}被逼迫起来 默认为 `1`。 。 。 .
    
-   `autoWidth` – 此选项允许您控制自动完整包装的宽度 。 何时 `false` 自动完成的包装将没有宽度样式属性,您可以将您的特定宽度属性放入您的 cs 来控制包装。 默认值是 `true`。 。 。 .
    

一种方案是使用这一选项。 譬如说. 你有一个 `max-width` css 属性在您的 `autocomplete-dropdown-menu` 您需要扩展宽度直到填充 `max-width`。在这种情况下,你放了一个 `width: auto` 在自动完成的 css 类包装和 `max-width` 在你的自动完成降级课 和所有完成.

## 数据集

自动完成由一个或多个数据集组成。 当最终用户修改 每个数据集将试图对基本输入值提出建议 新价值.

数据集可以使用下列选项进行配置.

-   `source` - 建议的辅助数据来源。 预期是一项职能 签名 `(query, cb)`预计该职能将 计算用于 `query` 然后引用 `cb` 说定了. `cb` 能够同步引用或 同步进行.
    
-   `name` - 数据集的名称。 本文后附 `tt-dataset-` 改为 构成包含 DOM 元素的类名称。 只须包括 下划线、破折号、字母(`a-z`)和数字。 默认为随机 编号.
    
-   `displayKey` - 对于给定的建议对象,确定字符串 代表大会。 用于设定输入值 选择建议后控制。 可以是密钥字符串,也可以是 函数将建议对象转换为字符串。 默认为 `value`。 。 。 . 函数使用示例: `displayKey: function(suggestion) { return suggestion.nickname || suggestion.firstName }`
    
-   `templates` – 在渲染数据集时使用一散列模板. 说明 预编译模板是一个将 JavaScript 对象作为其对象的函数 第一个参数并返回 HTML 字符串.
    
    -   `empty` - 当 `0` 可以为给定查询提供建议. 可以是HTML字符串,也可以是预编译模板. 诱导功能 的上下文中包含 `query`, (中文(简体) ), `isEmpty`,任意选项 来文方可能提出的论据: `function emptyTemplate({ query, isEmpty }, [forwarded args])`。 。 。 .
        
    -   `footer` – 在数据集下方渲染. 可以是 HTML 字符串或预编译模板. 诱导功能 的上下文中包含 `query`, (中文(简体) ), `isEmpty`,任意选项 来文方可能提出的论据: `function footerTemplate({ query, isEmpty }, [forwarded args])`。 。 。 .
        
    -   `header` – 在数据集上方被渲染. 可以是 HTML 字符串 或预编译模板. 诱导功能 的上下文中包含 `query`, (中文(简体) ), `isEmpty`,任意选项 来文方可能提出的论据: `function headerTemplate({ query, isEmpty }, [forwarded args])`。 。 。 .
        
    -   `suggestion` - 曾经提出过一个建议 诱导功能 与 `suggestion`,以及任何可能具有 来文方转交: `function suggestionTemplate(suggestion, [forwarded args])`。 。 。 . 默认值为 `displayKey` 包裹在一个 `p` 标记 :. `<p>{{value}}</p>`。 。 。 .
        
-   `debounce` - 如果设定, 将会将源执行推迟到之后 `debounce` 毫秒 自上次援引以来已经过去.
    
-   `cache` - 如果设置为 `false`,之后的相同查询将始终执行源函数以获取建议。 默认为 `true`。 。 。 .
    

## 来源

少数帮助者默认提供,以方便基于Algolia的源的创建.

### 点击数

建立基于Algolia的源 `hits` 数组,只需使用 :

```js
{
  source: autocomplete.sources.hits(indexObj, { hitsPerPage: 2 }),
  templates: {
    suggestion: function(suggestion, answer) {
      // FIXME
    }
  }
}
```

### ("xxxxx in yyyyy") (中文(简体) )

要构建一个类似亚马逊的自动完整菜单,建议流行查询,对于最受欢迎的显示关联类别者,您可以使用 `popularIn` 资料来源:

```js
{
  source: autocomplete.sources.popularIn(popularQueriesIndexObj, { hitsPerPage: 3 }, {
    source: 'sourceAttribute',           // attribute of the `popularQueries` index use to query the `index` index
    index: productsIndexObj,             // targeted index
    facets: 'facetedCategoryAttribute',  // facet used to enrich the most popular query
    maxValuesPerFacet: 3                 // maximum number of facets returned
  }, {
    includeAll: true,                    // should it include an extra "All department" suggestion
    allTitle: 'All departments'          // the included category label
  }),
  templates: {
    suggestion: function(suggestion, answer) {
      var value = suggestion.sourceAttribute;
      if (suggestion.facet) {
        // this is the first suggestion
        // and it has been enriched with the matching facet
        value += ' in ' + suggestion.facet.value + ' (' + suggestion.facet.count + ')';
      }
      return value;
    }
  }
}
```

### 自定义源

这个 `source` 选项也可以取一个函数。 它能让你更能控制 Algolia 搜索的结果 职能 `function(query, callback)` 需要2个参数

-   `query: String`: 自动完成中键入的文字
-   `callback: Function`: 处理结束时用一系列建议调用

```js
source: function(query, callback) {
  var index = client.initIndex('myindex');
  index.search(query, { hitsPerPage: 1, facetFilters: 'category:mycat' }).then(function(answer) {
    callback(answer.hits);
  }, function() {
    callback([]);
  });
}
```

或通过重用现有来源:

```js
var hitsSource = autocomplete.sources.hits(index, { hitsPerPage: 5 });

source: function(query, callback) {
  hitsSource(query, function(suggestions) {
    // FIXME: Do stuff with the array of returned suggestions
    callback(suggestions);
  });
}
```

## 警卫

### 用户生成的数据: 防范 XSS

恶意用户可能试图通过在数据中存储HTML/JS来设计XSS攻击. 重要的是,在使用用户生成的数据之前,必须适当逃出 _自动完成.js_ 模板.

为了方便地做到这一点, _自动完成.js_ 向您提供摆脱所有 HTML 代码但突出标记的帮助函数 :

```js
  templates: {
    suggestion: function(suggestion) {
      var val = suggestion._highlightResult.name.value;
      return autocomplete.escapeHighlightedString(val);
    }
  }
```

如果您确实指定了自定义加亮前/后标签, 您可以将其指定为第二和第三个参数 :

```js
  templates: {
    suggestion: function(suggestion) {
      var val = suggestion._highlightResult.name.value;
      return autocomplete.escapeHighlightedString(val, '<span class="highlighted">', '</span>');
    }
  }
```

## 财务问题

### 我怎么会 `Control`\- 点击结果,然后在新的标签中打开?

你需要更新你的建议模板,以使其成为 `<a href>` 链接 而不是简单的潜水. `Control`\- 点击它们会触发默认浏览器 行为和打开新标签中的建议 .

为了支持键盘导航, 你需要听 `autocomplete:selected` 事件和更改 `window.location` 前往目的地 URL (中文(简体) ).

请注意,您可能需要检查 `context.selectionMethod` 内 `autocomplete:selected` 先说 如是等数 `click`你应该 `return` 提前, 否则您的主窗口会 **(单位:千美元)** 跟着链接.

这里举出一个例子,说明它的样子:

```javascript
autocomplete(…).on('autocomplete:selected', function(event, suggestion, dataset, context) {
  // Do nothing on click, as the browser will already do it
  if (context.selectionMethod === 'click') {
    return;
  }
  // Change the page, for example, on other events
  window.location.assign(suggestion.url);
});
```

## 活动

自动完成组件触发以下自定义事件 .

-   `autocomplete:opened` - 当自动完成的下拉菜单是时触发 打开.
    
-   `autocomplete:shown` - 当自动完成的下拉菜单是时触发 显示( 打开和不空) .
    
-   `autocomplete:empty` – 当所有数据集为空时触发.
    
-   `autocomplete:closed` - 当自动完成的下拉菜单是时触发 关闭.
    
-   `autocomplete:updated` – 当数据集被渲染时触发.
    
-   `autocomplete:cursorchanged` - 移动下拉菜单光标时触发 对另一个建议。 3 将引用事件处理器 参数: j 查询事件对象、建议对象和名称 该数据集属于建议.
    
-   `autocomplete:selected` — 当下放菜单中的建议是时触发 选中 。 事件处理器将引用以下参数: jQuery 事件对象、建议对象、数据集名称 建议属于和属于 `context` 对象。 这个 `context` 包含 (单位:千美元) `.selectionMethod` 键可以是 `click`, (中文(简体) ), `enterKey`, (中文(简体) ), `tabKey` 或者说 `blur`,取决于建议是如何选定的.
    
-   `autocomplete:cursorremoved` - 当光标离开选择区时触发 或它的当前指数低于 0
    
-   `autocomplete:autocompleted` – 当查询自动完成时触发. 自动完成表示查询被更改为提示. 事件处理者会 以3个论点援引:j查询事件反对,建议反对, 以及建议所属数据集的名称.
    
-   `autocomplete:redrawn` - 触发当 `appendTo` 并调整了包装的大小/位置.
    

所有自定义事件都会在自定义完成时初始化的元素上被触发.

## API 密码

### 查询

任何转动 `input[type="text"]` 元素输入自动补全菜单. `globalOptions` 是一个 用于配置您喜欢的自动补全的散列选项。 参见 [全球选项](https://npmcn.com/package/%40easyops-cn/autocomplete.js/#readme-global-options) 需要更多关于现有配置的信息。 后续 参数( e)`*datasets`),是数据集的单个选项散列。 为了更多 有关数据集的详情,参见: [数据集](https://npmcn.com/package/%40easyops-cn/autocomplete.js/#readme-datasets)。 。 。 .

```
$(selector).autocomplete(globalOptions, datasets)
```

示例

```js
$('.search-input').autocomplete({
  minLength: 3
},
{
  name: 'my-dataset',
  source: mySource
});
```

#### j 查询# 自动完成(' destroy' )

删除自动完整功能并返回 `input` 元素返回到它的 原状.

```js
$('.search-input').autocomplete('destroy');
```

#### j 查询# 自动完成( “ 打开 ”)

打开自动完成的下拉菜单。 注意开放并不意味着 菜单可见。 菜单只有在打开并有内容时才可见.

```js
$('.search-input').autocomplete('open');
```

#### j 查询# 自动完成( “ 关闭 ”)

关闭自动完成的下拉菜单.

```js
$('.search-input').autocomplete('close');
```

#### j 查询# 自动完成( “ val” )

返回自动完成的当前值。 值是用户拥有的文本 输入 `input` 键.

```js
var myVal = $('.search-input').autocomplete('val');
```

#### j 查询# 自动完成( “ val, val )

设置自动完成的值。 这应当用来取代 `jQuery#val`。 。 。 .

```js
$('.search-input').autocomplete('val', myVal);
```

#### jQuery.fn.autocomplete.no 冲突()

返回自动完整插件的引用并返回 `jQuery.fn.autocomplete` 至上一个数值。 可用于避免命名相撞.

```js
var autocomplete = jQuery.fn.autocomplete.noConflict();
jQuery.fn._autocomplete = autocomplete;
```

### 独立

独立版本 API 是similier to jQuery 的:

```js
var search = autocomplete(containerSelector, globalOptions, datasets);
```

示例

```js
var search = autocomplete('#search', { hint: false }, [{
  source: autocomplete.sources.hits(index, { hitsPerPage: 5 })
}]);

search.autocomplete.open();
search.autocomplete.close();
search.autocomplete.getVal();
search.autocomplete.setVal('Hey Jude');
search.autocomplete.destroy();
search.autocomplete.getWrapper(); // since autocomplete.js wraps your input into another div, you can access that div
```

也可以通过自定义的 Autocomplete.js 构造器中的 Typeahead 实例 :

```js
var search = autocomplete('#search', { hint: false }, [{ ... }], new Typeahead({ ... }));
```

#### 自动完成。 no country ()

返回自动完整插件的引用并返回 `window.autocomplete` 至上一个数值。 可用于避免命名相撞.

```js
var algoliaAutocomplete = autocomplete.noConflict();
```

## 贡献和释放

见 [捐款额](https://npmcn.com/package/%40easyops-cn/autocomplete.js/CONTRIBUTING.md)

## 贷项

这个图书馆原来是从 [推特的typeahead.js (简体中文)](https://github.com/twitter/typeahead.js) 图书馆.

## 常见问题

### @easyops-cn/autocomplete\.js 是什么？

快速和全功能自动完成库

### 如何安装 @easyops-cn/autocomplete\.js？

在项目目录运行 npm install @easyops-cn/autocomplete\.js，或使用 pnpm add / yarn add / bun add。

### @easyops-cn/autocomplete\.js 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/easyops-cn\_\_autocomplete\.js 是否存在。

### @easyops-cn/autocomplete\.js 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @easyops-cn/autocomplete\.js 可以商用吗？

@easyops-cn/autocomplete\.js 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @easyops-cn/autocomplete\.js 的下载量有多少？

根据 npm 官方下载统计，@easyops-cn/autocomplete\.js 在 2026/10/13 – 2026/11/11 这 30 天内被下载 1,896,016 次，日均约 63,201 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @easyops-cn/autocomplete\.js 还在维护吗？

最新版本 0\.38\.1 发布于 2020/11/05（6 年前）；至今共发布 1 个版本，其中过去 12 个月发布了 0 个；首次发布于 2020/11/05。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

