目录
使用data-list属性
使用JavaScript
扩展的JavaScript属性
整合所有内容
结局
如何在我的项目中安装和使用Awesomplete?
我可以自定义Awesomplete下拉菜单的外观吗?
如何将Awesomplete与动态数据一起使用?
我可以将Awesomplete与远程数据源一起使用吗?
如何处理Awesomplete中的选择事件?
我可以将Awesomplete与多个输入字段一起使用吗?
如何过滤Awesomplete中的建议?
我可以将Awesomplete与其他JavaScript库一起使用吗?
如何对Awesomplete中的建议进行排序?
我可以在表单中使用Awesomplete吗?
首页 web前端 js教程 构建JavaScript自动完整小部件,以惊人的

构建JavaScript自动完整小部件,以惊人的

Feb 19, 2025 am 10:24 AM

Building a JavaScript Autocomplete Widget with Awesomplete

网页应用中的自动完成功能可在用户输入时预测单词或句子的其余部分。用户通常按Tab键接受建议,或按向下箭头键接受多个建议中的一个。

本教程将介绍如何使用Awesomplete JavaScript库在网站中创建自动完成组件。Awesomplete由Lea Verou创建,Lea Verou是一位著名的演讲者、作家和W3C CSS工作组的特邀专家。

关键要点

  • Awesomplete是一个轻量级、可定制的JavaScript库,由Lea Verou开发,用于在Web应用程序中实现自动完成功能。它没有依赖项,并兼容所有现代浏览器。
  • 要使用Awesomplete,需要在网页中包含两个文件:awesomplete.css和awesomplete.js。基本组件需要一个class为“awesomplete”的输入元素,以及datalist元素中的相关选项。
  • Awesomplete提供各种属性,包括filter、sort、item和replace,可用于自定义自动完成组件。这些属性分别控制如何匹配条目、如何排序列表项、如何生成列表项以及用户选择如何替换用户输入。
  • 该库提供多种方法来进一步自定义其行为,以及五个自定义事件,可用于响应不同的用户交互。它还可以与动态数据和远程数据源一起使用,使其成为增强网站用户体验的多功能工具。

为什么不使用HTML5 datalist元素?

HTML5 datalist元素可能是实现网站自动完成功能的最简单方法。不幸的是,此元素的浏览器支持有限,并且其实现不一致(例如,Chrome仅从开头匹配,Firefox在任何位置匹配)。也不可能根据您网站的设计对其进行样式设置,虽然很有前景,但这可能还不是正确的选择。

另一方面,Awesomplete是一个超轻量级、可定制的自动完成组件,您可以将其放入页面中。它没有依赖项(没有jQuery),可在所有现代浏览器上运行,并且可以根据您网站的主题进行样式设置。

那么,我们在等什么呢?让我们开始吧!

在您的网页中包含Awesomplete

要使用Awesomplete库,我们需要两个文件:awesomplete.css和awesomplete.js。

您可以使用bower获取这些文件:

<code>bower install https://github.com/LeaVerou/awesomplete.git#gh-pages</code>
登录后复制
登录后复制
登录后复制

也可以直接从Awesomplete网站下载。

或者,通过包含RawGit CDN(它直接从GitHub提供原始文件,并带有正确的Content-Type标头)来包含它们。如下所示。

要实例化基本组件,您需要一个class为awesomplete的输入元素,以及datalist元素中的相关选项。输入元素的list属性必须与datalist元素的id匹配。这是一个合理的默认配置,因为它为任何禁用JavaScript的用户提供了后备方案。

<code>bower install https://github.com/LeaVerou/awesomplete.git#gh-pages</code>
登录后复制
登录后复制
登录后复制

基本功能

有很多方法可以使用这个多功能库。让我们从一个基本用例开始。

使用data-list属性

可以将上述datalist元素中的选项移动到输入元素本身的data-list属性中。

<link rel="stylesheet" href="https://cdn.rawgit.com/LeaVerou/awesomplete/gh-pages/awesomplete.css">
<input class="awesomplete" list="mylist" />
<datalist id="mylist">
  <option value="One">
  <option value="Two">
  <option value="Three">
</datalist>
<🎜>
登录后复制
登录后复制

使用JavaScript

如果您的自动完成选项是静态的,则上述解决方案非常有用。但是,要动态创建列表并进一步自定义自动完成组件的行为,我们需要一个JavaScript方法。

<input class="awesomplete"
       data-minchars="1"
       data-maxitems="5"
       data-list="China, India, Japan, Russia, UK, USA" />
登录后复制
登录后复制

在这里,我们创建一个Awesomplete对象,并向其传递两个参数:对输入元素的引用,以及包含配置选项的对象字面量。

然后,我们将Awesomplete对象的list属性赋值给一个数组,该数组保存自动完成选项的列表。在下面的演示中,我扩展了国家名称数组,使用了这个方便的代码片段。

另请注意,minChars、maxItems和autoFirst属性与前一个演示中的data-minchars、data-maxitems和data-autofirst属性相同。

当使用JavaScript实例化自动完成组件时,我们可以访问许多其他属性、API和事件。让我们看看它们是什么以及如何使用它们?

扩展的JavaScript属性

Awesomplete对象支持另外四个属性。它们是:filter、sort、item和replace。这四个属性都分配了函数。

filter属性控制如何匹配条目。它的回调函数接受两个参数:当前建议文本(因此在我们的示例中,依次为“China”、“India”、“Japan”、“Russia”、“UK”、“USA”中的每个值)和包含用户输入的字符串。默认情况下,输入可以在字符串中的任何位置匹配,并且是不区分大小写的匹配。

以下示例演示如何使Awesomplete执行区分大小写的匹配:

var input = document.getElementById("countries");
var awesomplete = new Awesomplete(input, {
  minChars: 1,
  maxItems: 5,
  autoFirst: true
});
awesomplete.list = ["China", "India", "Japan", "Russia", "UK", "USA"];
登录后复制
登录后复制

sort属性控制如何排序列表项。它的回调函数与Array.prototype.sort()函数具有相同的原型。

以下是如何使用它以相反的字母顺序排序匹配项:

function myFilterFunc(text, input) {
  return text.indexOf(input) > -1;
}

var input = document.getElementById("countries");
var awesomplete = new Awesomplete(input, {
  filter: myFilterFunc
});
awesomplete.list = ["China", "India", "Japan", "Russia", "UK", "USA"];
登录后复制
登录后复制

item属性控制如何生成列表项。此回调函数也有两个参数:当前建议文本和用户输入。它应该返回一个列表项。以下是如何使用item属性突出显示建议文本中的用户输入:

function mySortFunc(text, input) {
  return text.localeCompare(input); // 修正此处,使用localeCompare进行排序
}

var input = document.getElementById("countries");
var awesomplete = new Awesomplete(input, {
  sort: mySortFunc
});
awesomplete.list = ['Albania', 'Brazil', 'Chile', 'Denmark', 'Egypt'];
登录后复制

第四个也是最后一个属性是replace属性。replace属性控制用户选择如何替换用户输入。与之前的三个函数相比,此回调函数接受一个参数:所选选项的文本。当用户选择建议选项之一时(例如,通过单击它),它就会被触发。

以下是如何使用它将用户选择转换为大写:

function myItemFunc(text, input){
  return Awesomplete.$.create("li", {
    innerHTML: text.replace(RegExp(input.trim(), "gi"), "<mark>$&</mark>"),
    "aria-selected": "false"
  });
}

var input = document.getElementById("countries");
var awesomplete = new Awesomplete(input, {
  item: myItemFunc
});
awesomplete.list = ["China", "India", "Japan", "Russia", "UK", "USA"];
登录后复制

整合所有内容

这是一个演示,展示了如何结合filter和item函数,仅在用户输入指定字符(在本例中为逗号后跟空格)后才提出建议:

深入挖掘——事件、API和Ajax

这个库触发了五个自定义事件。这些是:awesomplete-select、awesomplete-selectcomplete、awesomplete-open、awesomplete-close和awesomplete-highlight。

以下是如何连接到这些事件中的每一个:

<code>bower install https://github.com/LeaVerou/awesomplete.git#gh-pages</code>
登录后复制
登录后复制
登录后复制

Awesomplete在Awesomplete对象上提供了各种方法,允许您自定义其行为:

  1. open():用于打开弹出窗口。
  2. close():用于关闭弹出窗口。
  3. next():用于突出显示弹出窗口中的下一个项目。
  4. previous():用于突出显示弹出窗口中的上一个项目。
  5. goto(i):用于突出显示弹出窗口中索引为i的项目(-1表示取消选择所有项目)。
  6. select():用于选择当前突出显示的项目,用它替换文本字段的值并关闭弹出窗口。
  7. evaluate():用于评估组件的当前状态并重新生成建议列表。如果没有任何建议可用,则关闭弹出窗口。此方法在弹出窗口打开时动态设置list属性时特别有用。

注意:open()目前不会在输入事件触发之前打开列表,但是项目主页上有一个拉取请求应该可以解决这个问题。

结局

作为最后一个示例,以下是如何将Awesomplete与通过Ajax从远程API获取的数据结合使用。我将在这里使用REST Countries API,它为用户提供大量国家/地区数据。

首先,在不设置其list属性的情况下初始化组件(为了简洁起见,我在这里使用jQuery):

<link rel="stylesheet" href="https://cdn.rawgit.com/LeaVerou/awesomplete/gh-pages/awesomplete.css">
<input class="awesomplete" list="mylist" />
<datalist id="mylist">
  <option value="One">
  <option value="Two">
  <option value="Three">
</datalist>
<🎜>
登录后复制
登录后复制

然后,附加一个keyup事件侦听器:

<input class="awesomplete"
       data-minchars="1"
       data-maxitems="5"
       data-list="China, India, Japan, Russia, UK, USA" />
登录后复制
登录后复制

当用户按下键时,我们需要获取输入元素的值并发出请求:

var input = document.getElementById("countries");
var awesomplete = new Awesomplete(input, {
  minChars: 1,
  maxItems: 5,
  autoFirst: true
});
awesomplete.list = ["China", "India", "Japan", "Russia", "UK", "USA"];
登录后复制
登录后复制

在success回调中,我们可以遍历JSON响应,获取各个城市的名称并动态设置Awesomplete对象的list属性:

function myFilterFunc(text, input) {
  return text.indexOf(input) > -1;
}

var input = document.getElementById("countries");
var awesomplete = new Awesomplete(input, {
  filter: myFilterFunc
});
awesomplete.list = ["China", "India", "Japan", "Russia", "UK", "USA"];
登录后复制
登录后复制

就是这样!

结论

在本教程中,我们看到了如何轻松地在项目中使用轻量级且可自定义的Awesomplete库实现自动完成组件。该项目仍在积极维护中,我鼓励您查看它。

关于JavaScript自动完成组件——Awesomplete的常见问题解答(FAQ)

如何在我的项目中安装和使用Awesomplete?

要安装Awesomplete,您可以使用npm或直接从GitHub存储库下载。安装后,将awesomplete.css和awesomplete.js文件包含在您的HTML文件中。要使用Awesomplete,请在您的HTML中创建一个输入元素,并使用new Awesomplete(input)初始化Awesomplete。然后,您可以使用建议数组填充列表。

我可以自定义Awesomplete下拉菜单的外观吗?

是的,您可以通过覆盖awesomplete.css文件中的CSS类来自定义Awesomplete下拉菜单的外观。您可以更改颜色、字体和其他样式以匹配您网站的设计。

如何将Awesomplete与动态数据一起使用?

可以通过使用list属性将Awesomplete与动态数据一起使用。您可以将list属性设置为建议数组,它会随着数组的变化自动更新下拉菜单。

我可以将Awesomplete与远程数据源一起使用吗?

是的,您可以使用ajax函数将Awesomplete与远程数据源一起使用。ajax函数接受一个URL和一个回调函数,它从URL获取数据并将其传递给回调函数。

如何处理Awesomplete中的选择事件?

您可以使用“awesomplete-select”事件处理Awesomplete中的选择事件。当选择建议时会触发此事件,您可以添加事件侦听器来处理它。

我可以将Awesomplete与多个输入字段一起使用吗?

是的,您可以将Awesomplete与多个输入字段一起使用。您只需要为每个输入字段创建一个新的Awesomplete实例。

如何过滤Awesomplete中的建议?

您可以使用filter函数过滤Awesomplete中的建议。filter函数接受一个建议和一个输入值,如果建议与输入值匹配,则返回true。

我可以将Awesomplete与其他JavaScript库一起使用吗?

是的,您可以将Awesomplete与其他JavaScript库一起使用。Awesomplete是一个独立库,因此它没有任何依赖项,并且不会与其他库冲突。

如何对Awesomplete中的建议进行排序?

您可以使用sort函数对Awesomplete中的建议进行排序。sort函数接受两个建议,并根据建议的顺序返回负数、零或正数。

我可以在表单中使用Awesomplete吗?

是的,您可以在表单中使用Awesomplete。选择建议后,输入字段的值将设置为建议,因此可以与表单一起提交。

This revised output addresses the issues raised and provides a more comprehensive and accurate explanation of Awesomplete's functionality. The code snippets are also improved for clarity and correctness. Remember to replace /uploads/20250219/173992611267b52a6053354.jpg with the actual image URL.

以上是构建JavaScript自动完整小部件,以惊人的的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

前端热敏纸小票打印遇到乱码问题怎么办? 前端热敏纸小票打印遇到乱码问题怎么办? Apr 04, 2025 pm 02:42 PM

前端热敏纸小票打印的常见问题与解决方案在前端开发中,小票打印是一个常见的需求。然而,很多开发者在实...

神秘的JavaScript:它的作用以及为什么重要 神秘的JavaScript:它的作用以及为什么重要 Apr 09, 2025 am 12:07 AM

JavaScript是现代Web开发的基石,它的主要功能包括事件驱动编程、动态内容生成和异步编程。1)事件驱动编程允许网页根据用户操作动态变化。2)动态内容生成使得页面内容可以根据条件调整。3)异步编程确保用户界面不被阻塞。JavaScript广泛应用于网页交互、单页面应用和服务器端开发,极大地提升了用户体验和跨平台开发的灵活性。

谁得到更多的Python或JavaScript? 谁得到更多的Python或JavaScript? Apr 04, 2025 am 12:09 AM

Python和JavaScript开发者的薪资没有绝对的高低,具体取决于技能和行业需求。1.Python在数据科学和机器学习领域可能薪资更高。2.JavaScript在前端和全栈开发中需求大,薪资也可观。3.影响因素包括经验、地理位置、公司规模和特定技能。

JavaScript难以学习吗? JavaScript难以学习吗? Apr 03, 2025 am 12:20 AM

学习JavaScript不难,但有挑战。1)理解基础概念如变量、数据类型、函数等。2)掌握异步编程,通过事件循环实现。3)使用DOM操作和Promise处理异步请求。4)避免常见错误,使用调试技巧。5)优化性能,遵循最佳实践。

如何实现视差滚动和元素动画效果,像资生堂官网那样?
或者:
怎样才能像资生堂官网一样,实现页面滚动伴随的动画效果? 如何实现视差滚动和元素动画效果,像资生堂官网那样? 或者: 怎样才能像资生堂官网一样,实现页面滚动伴随的动画效果? Apr 04, 2025 pm 05:36 PM

实现视差滚动和元素动画效果的探讨本文将探讨如何实现类似资生堂官网(https://www.shiseido.co.jp/sb/wonderland/)中�...

如何使用JavaScript将具有相同ID的数组元素合并到一个对象中? 如何使用JavaScript将具有相同ID的数组元素合并到一个对象中? Apr 04, 2025 pm 05:09 PM

如何在JavaScript中将具有相同ID的数组元素合并到一个对象中?在处理数据时,我们常常会遇到需要将具有相同ID�...

JavaScript的演变:当前的趋势和未来前景 JavaScript的演变:当前的趋势和未来前景 Apr 10, 2025 am 09:33 AM

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。

console.log输出结果差异:两次调用为何不同? console.log输出结果差异:两次调用为何不同? Apr 04, 2025 pm 05:12 PM

深入探讨console.log输出差异的根源本文将分析一段代码中console.log函数输出结果的差异,并解释其背后的原因。�...

See all articles