HTML5 标签输入框(Tag Input)详解

HTML5 标签输入框(Tag Input)详解

标签输入框(Tag Input)是一种用户界面元素,允许用户输入多个标签或关键词,通常用于表单、搜索框或内容分类等场景。以下是实现标签输入框的详细讲解。
在这里插入图片描述

1. 任务概述

标签输入框允许用户动态添加和删除标签,提供更好的用户体验,特别是在需要输入多个项的情况下。

2. 代码结构

以下是一个简单的标签输入框实现示例:

<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>标签输入框示例</title><style>/* CSS样式在此 */</style>
</head>
<body><h2>标签输入框(Tag Input)示例</h2><div class="tag-input-container"><input type="text" id="tag-input" placeholder="输入标签并按回车"><div class="tags" id="tags"></div>
</div><script>// JavaScript事件在此
</script></body>
</html>
3. HTML部分
<div class="tag-input-container"><input type="text" id="tag-input" placeholder="输入标签并按回车"><div class="tags" id="tags"></div>
</div>
  • <div class="tag-input-container">: 包裹标签输入框和已输入标签的容器。
  • <input type="text" id="tag-input">: 用户输入标签的文本框。
  • <div class="tags" id="tags">: 用于显示已输入的标签。
4. CSS样式
<style>.tag-input-container {border: 1px solid #ccc; /* 边框 */padding: 10px; /* 内边距 */border-radius: 5px; /* 圆角 */display: flex; /* 使用flex布局 */flex-wrap: wrap; /* 允许换行 */}#tag-input {border: none; /* 隐藏边框 */outline: none; /* 去掉默认焦点样式 */flex: 1; /* 输入框占据剩余空间 */min-width: 200px; /* 最小宽度 */padding: 5px; /* 内边距 */}.tags {display: flex; /* 标签容器使用flex布局 */flex-wrap: wrap; /* 允许换行 */margin-bottom: 5px; /* 底部间距 */}.tag {background-color: #2196F3; /* 标签背景色 */color: white; /* 标签文字颜色 */padding: 5px 10px; /* 标签内边距 */border-radius: 3px; /* 标签圆角 */margin: 5px; /* 标签间距 */display: flex; /* 标签使用flex布局 */align-items: center; /* 垂直居中 */}.tag .remove {margin-left: 5px; /* 删除按钮左间距 */cursor: pointer; /* 鼠标悬停变为手指 */}
</style>
  • .tag-input-container: 设置输入框的外观,包括边框、内边距和布局。
  • #tag-input: 设置输入框的样式,隐藏边框和焦点样式,并占用剩余空间。
  • .tags: 用于存放已输入标签的容器,允许标签换行。
  • .tag: 定义标签的样式,包括背景色、文字颜色和间距。
  • .remove: 定义删除按钮的样式。
5. JavaScript部分
<script>const tagInput = document.getElementById('tag-input');const tagsContainer = document.getElementById('tags');tagInput.addEventListener('keypress', function(event) {if (event.key === 'Enter' && tagInput.value.trim() !== '') {const tagValue = tagInput.value.trim();addTag(tagValue);tagInput.value = ''; // 清空输入框}});function addTag(tag) {const tagElement = document.createElement('div');tagElement.className = 'tag';tagElement.textContent = tag;const removeButton = document.createElement('span');removeButton.className = 'remove';removeButton.textContent = '×'; // 删除符号removeButton.onclick = function() {tagsContainer.removeChild(tagElement); // 删除标签};tagElement.appendChild(removeButton);tagsContainer.appendChild(tagElement); // 添加标签到容器}
</script>
  • 获取元素: 使用document.getElementById获取输入框和标签容器。
  • 事件监听: 监听输入框的keypress事件,当用户按下回车键时执行回调。
  • 标签添加:
    • 检查输入是否为空。
    • 调用addTag函数添加标签。
    • 清空输入框。
  • addTag函数:
    • 创建一个新的标签元素和删除按钮。
    • 将删除按钮的点击事件绑定到标签元素的删除操作。
    • 将标签元素添加到标签容器中。
6. 整体效果
  • 用户可以在输入框中输入标签,按下回车后,标签会被添加到标签容器中。
  • 每个标签右侧都有一个删除按钮,点击后可以删除相应的标签。

总结

通过以上代码和讲解,你可以实现一个简单而功能强大的标签输入框(Tag Input)。这个控件不仅允许用户输入多个标签,还提供了删除功能,提升了用户体验。你可以根据需要进一步扩展和美化该控件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/500390.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

创建线程的8种方法

创建线程的8种方法 目录 继承Thread类实现Runnable接口实现Callable接口使用线程池使用ScheduledExecutorService使用Fork/Join框架使用CompletableFuture使用Guava的ListenableFuture总结 1. 继承Thread类 最直接的方式是创建一个继承自Thread类的子类&#xff0c;并重写其r…

计算机网络—————考研复试

第一章、计算机网络体系结构 1. OSI参考模型和TCP/IP模型&#xff1a; OSI与TCP/IP的记忆方法&#xff1a;只需把OSI的七层记住&#xff0c;将应用层、表示层、会话层一起记&#xff0c;到TCP/IP变成应用层。物理层和数据链路层换成网络接口层。把网络层换个字变成网际层。 而…

word运行时错误‘-2147221164(80040154)’ 没有注册类的解决办法

目录 问题描述解决方案 问题描述 解决方案 打开C盘找到路径C:\Users\Administrator\AppData\Roaming\Microsoft\Word\STARTUP或者在everything中搜索“Microsoft\Word\STARTUP”删除NEWebWordAddin.dotm文件即可正确打开word。

虚拟机Centos下安装Mysql完整过程(图文详解)

目录 一. 准备工作 1. 设置虚拟机静态IP 2. 卸载Mysql 3. 给CentOS添加rpm源 二. 安装MySQL 1. 安装mysql服务 2. 启动mysql服务 3. 开启MySQL开机自启动 4. 查看mysql服务状态 5. 查看mysql初始密码 6. 登录mysql &#xff0c;修改密码 7. 允许外部访问MySQL数据库…

VScode 只能运行c,运行不了c++的解决问题

原文链接&#xff1a;Vscode只能运行c&#xff0c;运行不了c的解决方法 VScode 只能运行c&#xff0c;运行不了c&#xff0c;怎么回事呢&#xff0c;解决问题&#xff1a; 在tasks.json中加上“"-lstdc"”&#xff0c; 这样之后 要重启VScode&#xff0c;点击链接…

driftingblues6靶机

打开靶场 查看页面源代码&#xff0c;最下面有一个注释&#xff0c;提供了一个网址 vmlist.github.io&#xff0c;我们去访问一下 这里是一个github页面&#xff0c;提供攻防虚拟机的下载&#xff0c;对我们解题并没有什么有用的信息&#xff0c;我们再去扫描端口 发现只有80端…

YOLOv5部署到web端(flask+js简单易懂)

文章目录 前言最终实现效果图后端实现 主界面检测函数检测结果显示 前端实现 主界面(index.html&#xff09;显示图片界面 总结 前言 最近&#xff0c;老板让写一个程序把yolov5检测模型部署到web端&#xff0c;在网页直接进行目标检测。经过1个星期的努力&#xff0c;终于实…

基本算法——聚类

目录 创建工程 加载数据 聚类算法 评估 完整代码 结论 相比于有监督的分类器&#xff0c;聚类的目标是从一组未打标签的数据中识别相似对象组。它可 以用于识别同类群体的代表性样本&#xff0c;找到有用与合适的分组&#xff1b;或者找到不寻常的样本&#xff0c;比如 异…

安装教程:慧集通集成平台(DataLinkX)智能体客户端安装操作(Linux/windows/mac)

1.下载客户端 使用提供的账号登录集成平台后台(https://www.datalinkx.cn/),点击左侧菜单栏【智能体】→【智能体】进入到智能体列表界面&#xff0c;在该界面我们找到功能栏中的下载按钮点击则会弹出下载界面&#xff0c;在该界面我们可以选择不同的系统操作系统来下载对应版…

【Rust自学】8.4. String类型 Pt.2:字节、标量值、字形簇以及字符串的各类操作

8.4.0. 本章内容 第八章主要讲的是Rust中常见的集合。Rust中提供了很多集合类型的数据结构&#xff0c;这些集合可以包含很多值。但是第八章所讲的集合与数组和元组有所不同。 第八章中的集合是存储在堆内存上而非栈内存上的&#xff0c;这也意味着这些集合的数据大小无需在编…

1、pycharm、python下载与安装

1、去官网下载pycharm 官网&#xff1a;https://www.jetbrains.com/pycharm/download/?sectionwindows 2、在等待期间&#xff0c;去下载python 进入官网地址&#xff1a;https://www.python.org/downloads/windows/ 3、安装pycharm 桌面会出现快捷方式 4、安装python…

静默模式下安装Weblogic 14.1.1.0.0

目录 一、下载weblogic安装包二、安装JDK三、安装weblogic1、创建weblogic用户2、创建weblogic的安装目录3、上传并解压weblogic安装包4、创建 oraInst.loc 文件5、创建 wls.rsp 响应文件6、静默安装weblogic7、创建域8、启动Weblogic9、设置防火墙规则,以便其他服务器访问10、…

Windows安装Confluence详解

Confluence官网下载地址&#xff1a;https://www.atlassian.com/software/confluence/download-archives 建议安装confluence版本下载5.0-7.0之间&#xff0c;比较稳定一点&#xff0c;我安装的是6.8.2版本 centos7系统和阿里云服务安装后太卡了&#xff0c;果断放弃 Conflu…

Unity is running as administrator解决办法

每次打开Unity项目都会有这个弹窗 解决办法&#xff1a; 打开本地安全策略 - 安全选项 &#xff0c;把 用户账户控制&#xff1a;以管理员批准模式运行所有管理员 用户账户控制&#xff1a;用于内置管理员账户的管理员批准模式 改成已启用就行

springboot+vue实现SSE服务器发送事件

思路 一个基于订阅发布机制的SSE事件。客户端可以请求订阅api&#xff08;携带客户端id&#xff09;&#xff0c;与服务器建立SSE链接&#xff1b;后续服务器需要推送消息到客户端时&#xff0c;再根据客户端id从已建立链接的会话中找到目标客户端&#xff0c;将消息推送出去。…

【阻塞队列】- ArrayBlockingQueue 的原理-迭代器

文章目录 1. 前言2. 迭代器3. Itrs3.1 参数3.2 迭代器 Itr3.2.1 参数3.2.2 构造器3.2.3 hasNext3.2.4 next3.2.5 remove3.2.6 shutdown3.2.7 removedAt3.2.8 takeIndexWrapped 3.3 doSomeSweeping&#xff08;tryHandler&#xff09;3.4 register3.5 takeIndexWrapped3.6 remov…

人工智能与传统编程的主要区别是什么?

传统编程&#xff1a;开发者预先编写软件行为规则&#xff0c;代码基于程序员定义逻辑处理输入并产生确定输出&#xff0c;具有确定性、手动编写规则和结构化逻辑特点&#xff0c;如垃圾邮件分类程序基于预设关键词等规则。AI 编程&#xff1a;从数据中学习而非手动编写规则&am…

SpringBoot使用TraceId日志链路追踪

项目场景&#xff1a; ??有时候一个业务调用链场景&#xff0c;很长&#xff0c;调了各种各样的方法&#xff0c;看日志的时候&#xff0c;各个接口的日志穿插&#xff0c;确实让人头大。为了解决这个痛点&#xff0c;就使用了TraceId&#xff0c;根据TraceId关键字进入服务…

ts总结一下

ts基础应用 /*** 泛型工具类型*/ interface IProps {id: string;title: string;children: number[]; } type omita Omit<IProps, id | title>; const omitaA: omita {children: [1] }; type picka Pick<IProps, id | title>; const pickaA: picka {id: ,title…

八大排序——直接插入排序

直接插入排序&#xff08;Straight Insertion Sort&#xff09;&#xff0c;通常简称为插入排序&#xff0c;是一种简单直观的排序算法。它的工作原理是通过构建有序序列&#xff0c;对于未排序数据&#xff0c;在已排序序列中从后向前扫描&#xff0c;找到相应位置并插入。本文…