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

news2025/1/5 9:15:08

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.coloradmin.cn/o/2270007.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端加载自己制作的栅格切片服务充当底图

注意mapview的center属性和tilelayer.fullExtent的区别。 前者是设置mapview显示的中心点坐标&#xff0c; const view new MapView({ container: "viewDiv", map: map, center:[100,25] }); 后者是读…

Windows 安装Mysql 8.1.0版本,并迁移数据库

一、下载MySQL压缩包 进入MySQL官网&#xff1a;https://downloads.mysql.com/archives/community/ 下载zip包到本地&#xff0c;然后解压缩。 二、安装MySQL 1、 创建my.ini文件 新创建一个my.ini文件&#xff0c;文件内容如下&#xff0c;记得修改【basedir】和【datadir…

uniapp——微信小程序,从客户端会话选择文件

微信小程序选择文件 文章目录 微信小程序选择文件效果图选择文件返回数据格式 API文档&#xff1a; chooseMessageFile 微信小程序读取文件&#xff0c;请查看 效果图 选择文件 /*** description 从客户端会话选择文件* returns {String} 文件路径*/ const chooseFile () &g…

学习threejs,导入CTM格式的模型

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.ColladaLoader DAE模…

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…

虚拟机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数据库…

SwiftUI:多语言实现富文本插值

实现的UI需求&#xff1a; 要求&#xff1a; 英文显示&#xff1a;3068 people have joined this plan today! 中文显示&#xff1a;今日有 3068 人已加入此计划&#xff01; 实现代码&#xff1a; Text(AttributedString(localized:"**\(payPeoples)** people have joi…

中巨伟业推出高安全高性能32位智能卡内核可编程加密芯片SMEC88SP/ST

1、产品特性  以最高安全等级的智能卡芯片内核为基础&#xff0c;具有极高的软硬件安全性  实现客户关键功能或算法代码下载&#xff0c;用户可以灵活实现自有知识产权的保护  标准 SOP8、SOT23-6 封装形式&#xff0c;器件封装小  标准 I2C 接口&#xff0c;具有接…

部署SenseVoice

依赖 Conda cuda pythor 查看GPU版本-CSDN博客 创建虚拟conda环境 conda create --name deeplearn python3.10 conda activate deeplearn git clone https://github.com/FunAudioLLM/SenseVoice.git cd SenseVoice pip install -r requirements.txt pip install gradio pip …

微信流量主挑战:用户数30!新增文档转化功能,解决docker运行jar包报错SimSun找不到的问题(新纪元5)

哎呀&#xff0c;今天忙到飞起&#xff0c;文章晚点更新啦&#xff01;不过好消息是&#xff0c;我们的小程序用户终于突破30啦&#xff0c;感谢大家的支持&#xff01;而且&#xff0c;大家期待已久的文档转化功能明天就要上线啦&#xff0c;目前支持word转pdf&#xff0c;pdf…

操作系统课后题总复习

目录 一、第一章 1.1填空题 1.2单项选择题 1.3多项选择题 1.4判断题 1.5名词解释 1.6简答题 二、第二章 2.1填空题 2.2单项选择题 2.3 多项选择题 2.4判断题 2.5名词解释 2.6简答题 三、第三章 3.1填空题 3.2单项选择题 3.3多项选择题 3.4判断题 3.5名词解…

C语言期末复习笔记(下)

目录 九、指针 1.指针变量的定义和初始化 2.间接寻址符* 3.按值调用和按址调用 4.实例 5.函数指针 6.指针变量和其它类型变量的对比 十、字符串 1.字符串常量 2.字符串的存储 3.字符指针 4.字符串的访问和输入/输出 5.字符串处理函数 &#xff08;1&#xff09;str…

保姆级教程Docker部署ClickHouse镜像

目录 1、安装Docker及可视化工具 2、创建挂载目录 3、获取配置文件 4、运行ClickHouse容器 5、Compose运行ClickHouse容器 6、查看ClickHouse运行状态 7、安装包部署 1、安装Docker及可视化工具 Docker及可视化工具的安装可参考&#xff1a;Ubuntu上安装 Docker及可视化…

飞牛私有云APP结合cpolar内网穿透技术实现远程连接本地fnOS NAS

文章目录 前言1. 本地连接测试2. 飞牛云安装Cpolar3. 配置公网连接地址4. 飞牛云APP连接测试5. 固定APP远程地址6. 固定APP地址测试 前言 现在生活和工作中的各种设备都变得越来越智能&#xff0c;而数据存储的需求也随之剧增。想象一下&#xff1a;你正在外地出差&#xff0c…

计算机网络 (17)点对点协议PPP

一、PPP协议的基本概念 PPP协议最初设计是为两个对等节点之间的IP流量传输提供一种封装协议&#xff0c;它替代了原来非标准的第二层协议&#xff08;如SLIP&#xff09;。在TCP/IP协议集中&#xff0c;PPP是一种用来同步调制连接的数据链路层协议&#xff08;OSI模式中的第二层…

RC充电电路仿真与分析

RC充电原理 下图是一个常见的RC充电电路&#xff1a;&#xff08;假设R10K&#xff0c;C100nF&#xff09; SW断开时&#xff0c;这个电路处于断路状态&#xff0c;C既没有充电也没有放电&#xff1b;SW闭合时&#xff0c;直流电源5V为电容C充电&#xff1b; 充电时电容两端…

全新免押租赁系统助力商品流通高效安全

内容概要 全新免押租赁系统的推出&#xff0c;可以说是一场商品流通领域的小革命。想象一下&#xff0c;不再为押金烦恼&#xff0c;用户只需通过一个简单的信用评估&#xff0c;就能快速租到所需商品&#xff0c;这种体验简直令人惊喜&#xff01;这个系统利用代扣支付技术&a…

c++领域展开第八幕——类和对象(下篇 初始化列表、类型转换、static成员)超详细!!!!

文章目录 前言一、初始化列表二、类型转换三、static成员总结 前言 上篇博客我们实现了一个简单的日期类&#xff0c;基本的类和对象是清楚了 今天我们再来学习后面的一些类和对象的语法&#xff0c;慢慢的完善所学的东西 fellow me 一、初始化列表 • 之前我们实现构造函数时…

Linux-Ubuntu之RGBLCD显示屏

Linux-Ubuntu之RGBLCD显示屏 一&#xff0c;实现原理二&#xff0c;驱动代码三&#xff0c;总结1.c语言知识 一&#xff0c;实现原理 采用的是4.3寸 800480显示屏&#xff0c;即每行有800个像素点&#xff0c;每列有480个像素点&#xff0c;外接时钟信号&#xff0c;控制刷新频…

JVM 主要组成部分与内存区域

一、JVM 主要组成部分&#xff1a; JVM的主要包含两个组件和两个子系统&#xff0c;分别为&#xff1a; &#xff08;1&#xff09;本地库接口(Native Interface)&#xff1a;与native lib(本地方法库)交互&#xff0c;融合其他编程语言为Java所用&#xff0c;是与其它编程语言…