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

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

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

1. 任务概述

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

2. 代码结构

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

html 复制代码
<!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部分
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样式
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部分
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)。这个控件不仅允许用户输入多个标签,还提供了删除功能,提升了用户体验。你可以根据需要进一步扩展和美化该控件。

相关推荐
FungLeo5 分钟前
React 管理后台实战 · 列表里突然出现一堆空白行?PIPL 擦除后前端怎么处理才不露馅
前端·react.js·状态模式·pipl
BigTopOne9 分钟前
ArLiveLite — System Architecture
前端
JL1521 分钟前
如何用 MySQL 持久化、历史快照与游标实现多步 Redo/Undo
前端·数据库·mysql
灯澜忆梦31 分钟前
【基于GO的Web开发9】gin框架返回json
前端·后端·golang·gin
IMPYLH36 分钟前
HTML 的 <ins> 元素
前端·javascript·html
kymjs张涛38 分钟前
DeepSeek Harness源码分析:非 AI 开发者的 Agent 学习总结
前端·后端·面试
Dovis(誓平步青云)38 分钟前
番茄钟真正难的不是倒计时:启动、暂停、重置与页面销毁
android·服务器·前端
一千柯橘41 分钟前
了解 dev-tools 不同的 debug 模式
前端
晨米酱41 分钟前
Umi Mock 如何从文件声明变成 HTTP 响应
前端·javascript·设计
小粉粉hhh43 分钟前
记录前端菜鸟的日常——自动打包脚本
前端