搜索
首页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
Python和JavaScript:了解每个的优势Python和JavaScript:了解每个的优势May 06, 2025 am 12:15 AM

Python和JavaScript各有优势,选择取决于项目需求和个人偏好。1.Python易学,语法简洁,适用于数据科学和后端开发,但执行速度较慢。2.JavaScript在前端开发中无处不在,异步编程能力强,Node.js使其适用于全栈开发,但语法可能复杂且易出错。

JavaScript的核心:它是在C还是C上构建的?JavaScript的核心:它是在C还是C上构建的?May 05, 2025 am 12:07 AM

javascriptisnotbuiltoncorc; saninterpretedlanguagethatrunsonenginesoftenwritteninc.1)javascriptwasdesignedAsalightweight,解释edganguageforwebbrowsers.2)Enginesevolvedfromsimpleterterterpretpreterterterpretertestojitcompilerers,典型地提示。

JavaScript应用程序:从前端到后端JavaScript应用程序:从前端到后端May 04, 2025 am 12:12 AM

JavaScript可用于前端和后端开发。前端通过DOM操作增强用户体验,后端通过Node.js处理服务器任务。1.前端示例:改变网页文本内容。2.后端示例:创建Node.js服务器。

Python vs. JavaScript:您应该学到哪种语言?Python vs. JavaScript:您应该学到哪种语言?May 03, 2025 am 12:10 AM

选择Python还是JavaScript应基于职业发展、学习曲线和生态系统:1)职业发展:Python适合数据科学和后端开发,JavaScript适合前端和全栈开发。2)学习曲线:Python语法简洁,适合初学者;JavaScript语法灵活。3)生态系统:Python有丰富的科学计算库,JavaScript有强大的前端框架。

JavaScript框架:为现代网络开发提供动力JavaScript框架:为现代网络开发提供动力May 02, 2025 am 12:04 AM

JavaScript框架的强大之处在于简化开发、提升用户体验和应用性能。选择框架时应考虑:1.项目规模和复杂度,2.团队经验,3.生态系统和社区支持。

JavaScript,C和浏览器之间的关系JavaScript,C和浏览器之间的关系May 01, 2025 am 12:06 AM

引言我知道你可能会觉得奇怪,JavaScript、C 和浏览器之间到底有什么关系?它们之间看似毫无关联,但实际上,它们在现代网络开发中扮演着非常重要的角色。今天我们就来深入探讨一下这三者之间的紧密联系。通过这篇文章,你将了解到JavaScript如何在浏览器中运行,C 在浏览器引擎中的作用,以及它们如何共同推动网页的渲染和交互。JavaScript与浏览器的关系我们都知道,JavaScript是前端开发的核心语言,它直接在浏览器中运行,让网页变得生动有趣。你是否曾经想过,为什么JavaScr

node.js流带打字稿node.js流带打字稿Apr 30, 2025 am 08:22 AM

Node.js擅长于高效I/O,这在很大程度上要归功于流。 流媒体汇总处理数据,避免内存过载 - 大型文件,网络任务和实时应用程序的理想。将流与打字稿的类型安全结合起来创建POWE

Python vs. JavaScript:性能和效率注意事项Python vs. JavaScript:性能和效率注意事项Apr 30, 2025 am 12:08 AM

Python和JavaScript在性能和效率方面的差异主要体现在:1)Python作为解释型语言,运行速度较慢,但开发效率高,适合快速原型开发;2)JavaScript在浏览器中受限于单线程,但在Node.js中可利用多线程和异步I/O提升性能,两者在实际项目中各有优势。

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脱衣机

Video Face Swap

Video Face Swap

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

热工具

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

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

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。