搜索
首页web前端js教程构建JavaScript自动完整小部件,以惊人的

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
JavaScript引擎:比较实施JavaScript引擎:比较实施Apr 13, 2025 am 12:05 AM

不同JavaScript引擎在解析和执行JavaScript代码时,效果会有所不同,因为每个引擎的实现原理和优化策略各有差异。1.词法分析:将源码转换为词法单元。2.语法分析:生成抽象语法树。3.优化和编译:通过JIT编译器生成机器码。4.执行:运行机器码。V8引擎通过即时编译和隐藏类优化,SpiderMonkey使用类型推断系统,导致在相同代码上的性能表现不同。

超越浏览器:现实世界中的JavaScript超越浏览器:现实世界中的JavaScriptApr 12, 2025 am 12:06 AM

JavaScript在现实世界中的应用包括服务器端编程、移动应用开发和物联网控制:1.通过Node.js实现服务器端编程,适用于高并发请求处理。2.通过ReactNative进行移动应用开发,支持跨平台部署。3.通过Johnny-Five库用于物联网设备控制,适用于硬件交互。

使用Next.js(后端集成)构建多租户SaaS应用程序使用Next.js(后端集成)构建多租户SaaS应用程序Apr 11, 2025 am 08:23 AM

我使用您的日常技术工具构建了功能性的多租户SaaS应用程序(一个Edtech应用程序),您可以做同样的事情。 首先,什么是多租户SaaS应用程序? 多租户SaaS应用程序可让您从唱歌中为多个客户提供服务

如何使用Next.js(前端集成)构建多租户SaaS应用程序如何使用Next.js(前端集成)构建多租户SaaS应用程序Apr 11, 2025 am 08:22 AM

本文展示了与许可证确保的后端的前端集成,并使用Next.js构建功能性Edtech SaaS应用程序。 前端获取用户权限以控制UI的可见性并确保API要求遵守角色库

JavaScript:探索网络语言的多功能性JavaScript:探索网络语言的多功能性Apr 11, 2025 am 12:01 AM

JavaScript是现代Web开发的核心语言,因其多样性和灵活性而广泛应用。1)前端开发:通过DOM操作和现代框架(如React、Vue.js、Angular)构建动态网页和单页面应用。2)服务器端开发:Node.js利用非阻塞I/O模型处理高并发和实时应用。3)移动和桌面应用开发:通过ReactNative和Electron实现跨平台开发,提高开发效率。

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

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

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

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

Python还是JavaScript更好?Python还是JavaScript更好?Apr 06, 2025 am 12:14 AM

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。 1.Python以简洁语法和丰富库生态着称,适用于数据分析和Web开发。 2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。