JS实现表单多文件上传样式美化支持选中文件后删除相关项

JS实现表单多文件上传样式美化支持选中文件后删除相关项的完整攻略主要包括以下三个步骤:

  1. HTML结构的搭建

在HTML结构中,我们需要使用文件输入框和上传按钮,同时利用CSS样式美化显示效果。具体HTML结构如下:

<div id="upload-area">
  <input type="file" id="upload" name="file" multiple="multiple" />
  <label for="upload">上传文件</label>
  <ul id="file-list"></ul>
</div>

在这个结构中,input标签的属性typefile,并设置了multiple属性,允许用户选择多个文件。label标签的for属性绑定了input标签的id,以实现对input标签的点击事件进行触发。而ul标签用来存储已选中的文件。

  1. JS事件绑定

在JS中,我们需要对input标签和ul标签绑定相关事件,以实现文件选择、文件上传和删除等功能。具体代码如下:

// 获取input和ul标签
var upload = document.getElementById('upload');
var fileList = document.getElementById('file-list');

// 绑定input标签的change事件,实现选中文件添加到文件列表
upload.addEventListener('change', function () {
  // 获取已选中的文件列表
  var files = upload.files;
  for (var i = 0, len = files.length; i < len; i++) {
    var file = files[i];
    var li = document.createElement('li');
    li.innerHTML = file.name;
    // 添加删除按钮
    li.innerHTML += '<button class="delete-file">删除</button>';
    fileList.appendChild(li);
  }
});

// 绑定ul标签内部的点击事件,实现选中文件后的删除功能
fileList.addEventListener('click', function (event) {
  if (event.target.className === 'delete-file') {
    var li = event.target.parentNode;
    var ul = li.parentNode;
    ul.removeChild(li);
  }
});

// 绑定form表单的submit事件,实现文件上传到服务器
var form = document.getElementById('form');
form.addEventListener('submit', function (event) {
  event.preventDefault();
  // 构造FormData对象
  var formData = new FormData();
  var files = upload.files;
  for (var i = 0, len = files.length; i < len; i++) {
    var file = files[i];
    formData.append('file[]', file);
  }
  // 使用XMLHttpRequest对象上传文件
  var xhr = new XMLHttpRequest();
  xhr.open('POST', '/upload', true);
  xhr.send(formData);
});

在这个代码中,我们分别绑定了input标签的change事件、ul标签内部的点击事件和form表单的submit事件,从而实现了选中文件添加到文件列表、选中文件后的删除、以及文件上传到服务器的功能。

  1. CSS样式的设置

最后,我们需要使用CSS样式来美化表单的显示效果和文件列表中上传的文件的显示效果。具体代码如下:

/* 隐藏原生的文件输入框 */
#upload {
  display: none;
}

/* 上传按钮的样式 */
label[for="upload"] {
  display: inline-block;
  margin: 10px 0;
  padding: 10px 20px;
  font-size: 16px;
  color: #fff;
  background-color: #3498db;
  border-radius: 4px;
  cursor: pointer;
}

/* 已选择的文件列表的样式 */
#file-list {
  margin-top: 20px;
  padding: 0;
  list-style: none;
}

#file-list li {
  display: block;
  margin: 5px 0;
  padding: 5px;
  font-size: 14px;
  background-color: #f2f2f2;
  border: 1px solid #ccc;
  border-radius: 4px;
  box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
}

#file-list li button {
  margin-left: 10px;
  padding: 3px 5px;
  font-size: 12px;
  color: #fff;
  background-color: #e74c3c;
  border: none;
  border-radius: 4px;
  cursor: pointer;
}

#file-list li button:hover {
  background-color: #c0392b;
}

在这个代码中,我们主要设置了上传按钮的样式、已选择的文件列表的样式以及删除按钮的样式。

以上就是JS实现表单多文件上传样式美化支持选中文件后删除相关项的完整攻略。接下来,我们来看两个具体的实例说明。

示例1:表单多文件上传

<form id="form" action="/upload" method="post" enctype="multipart/form-data">
  <div id="upload-area">
    <input type="file" id="upload" name="file" multiple="multiple" />
    <label for="upload">上传文件</label>
    <ul id="file-list"></ul>
  </div>
  <button type="submit">提交</button>
</form>

在这个表单中,我们使用了以上三个步骤中的HTML结构、JS事件绑定和CSS样式设置,从而实现了表单的多文件上传功能,并且利用CSS样式美化显示效果。

示例2:文件管理页面

<div id="upload-area">
  <input type="file" id="upload" name="file" multiple="multiple" />
  <label for="upload">上传文件</label>
  <ul id="file-list"></ul>
</div>

<script>
// 动态获取已上传的文件列表
var fileList = document.getElementById('file-list');
fetch('/files')
  .then(response => response.json())
  .then(files => {
    files.forEach(file => {
      var li = document.createElement('li');
      li.innerHTML = file.name + ' (' + formatSize(file.size) + ')';
      // 添加删除按钮
      li.innerHTML += '<button class="delete-file">删除</button>';
      fileList.appendChild(li);
    }); 
  })

// 工具函数:格式化文件大小
function formatSize(size) {
  if (size < 1024) {
    return size + 'B';
  } else if (size < (1024 * 1024)) {
    return (size / 1024).toFixed(2) + 'KB';
  } else if (size < (1024 * 1024 * 1024)) {
    return (size / (1024 * 1024)).toFixed(2) + 'MB';
  } else {
    return (size / (1024 * 1024 * 1024)).toFixed(2) + 'GB';
  }
}

// 绑定ul标签内部的点击事件,实现选中文件后的删除功能
fileList.addEventListener('click', function (event) {
  if (event.target.className === 'delete-file') {
    var li = event.target.parentNode;
    var ul = li.parentNode;
    ul.removeChild(li);
    // 向服务器发送删除请求
    var fileName = li.innerHTML.split(' ')[0];
    fetch('/delete', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        fileName: fileName
      })
    })
  }
});

// 绑定form表单的submit事件,实现文件上传到服务器
var form = document.getElementById('form');
form.addEventListener('submit', function (event) {
  event.preventDefault();
  // 构造FormData对象
  var formData = new FormData();
  var files = upload.files;
  for (var i = 0, len = files.length; i < len; i++) {
    var file = files[i];
    formData.append('file[]', file);
  }
  // 使用XMLHttpRequest对象上传文件
  var xhr = new XMLHttpRequest();
  xhr.open('POST', '/upload', true);
  xhr.send(formData);
});
</script>

在这个页面中,我们同样使用了以上三个步骤中的HTML结构、JS事件绑定和CSS样式设置,从而实现了文件管理页面。并且利用了fetch API向服务器发送GET请求获取已上传的文件列表,并向服务器发送POST请求实现文件的上传和删除。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS实现表单多文件上传样式美化支持选中文件后删除相关项 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 实训23 功能FC的建立与调用

    实训23 功能FC的建立与调用 在这篇文章中,我们将学习如何在网站中建立和调用功能FC。 什么是功能FC? FC代表Function Component,是一种封装的小型代码块,可以在网站中被多次重复使用。功能FC可以帮助我们避免代码重复,提高代码的可维护性和可复用性。 建立功能FC 我们可以通过以下步骤在网站中建立功能FC: 在网站的顶层目录下新建comp…

    其他 2023年3月28日
    00
  • win7右键中添加【获取管理员权限】手动添加reg到注册表

    下面是完整的攻略: 1. 创建.reg文件并编辑 首先,我们需要创建一个.reg文件,并且编辑它,将相应的代码添加到文件中。在此过程中,我们将使用Windows自带的“记事本”工具进行编辑。 在桌面或文件夹中右键点击鼠标,选择“新建”–>“文本文档”–>命名为“AddAdmin.reg”。 双击打开“AddAdmin.reg”文件,在文件中输…

    other 2023年6月27日
    00
  • 详解iOS开发中使用storyboard创建导航控制器的方法

    详解iOS开发中使用storyboard创建导航控制器的方法 如果我们在开发iOS应用中需要使用导航控制器,可以使用Storyboard来创建并管理导航控制器。 下面是使用Storyboard创建导航控制器的步骤: 新建工程 在新建工程的时候,选择Single View Application模板,勾选Use Storyboards和Use Automati…

    other 2023年6月27日
    00
  • php使用cookie保存登录用户名的方法

    下面就为大家详细讲解一下“PHP使用cookie保存登录用户名的方法”的完整攻略。 什么是cookie? 在开始讲解之前,我们需要先了解一下cookie。cookie,即“小甜饼”,是指服务器发送到用户浏览器,记录用户访问网站的一些信息的文本文件。它可以在浏览器端存储用户信息,如登录状态、用户偏好、购物车信息等等,以便于下一次用户访问网站时可以直接使用这些信…

    other 2023年6月27日
    00
  • 浅谈Android中Service的注册方式及使用

    让我为您详细讲解“浅谈Android中Service的注册方式及使用”的完整攻略。 介绍 在Android中,Service是一种组件,用于在后台执行长时间操作而不需要用户交互。Service可以在单独的进程中运行,这使得它可以在不同的应用程序之间共享。在本文中,我们将讨论Service的注册方式及使用,包括两种Service的注册方式、调用Service的…

    other 2023年6月27日
    00
  • JavaScript常用变量声明方式总结

    JavaScript常用变量声明方式总结 在JavaScript中,我们可以使用不同的方式来声明变量。每种方式都有其特定的用途和作用域规则。下面是JavaScript常用的变量声明方式的总结: 1. 使用var关键字声明变量 使用var关键字可以声明一个变量,并且它的作用域是函数作用域。这意味着在函数内部声明的变量只在函数内部可见。 function exa…

    other 2023年8月9日
    00
  • js的navigator对象

    当然,我很乐意为您提供有关“JavaScript的navigator对象”的完整攻略。以下是详细的步骤和两个示例: 1. 什么是navigator对象? navigator对象是JavaScript中的一个内置对象,它提供了有关浏览器的信息。使用navigator对象,可以获取浏览器的名称、版本、操作系统、语言等信息。 以下是获取浏览器名称和版本的基本语法:…

    other 2023年5月6日
    00
  • JAX-WS 学习一:基于java的最简单的WebService服务

    JAX-WS 学习一:基于java的最简单的WebService服务 在本文中,我们将探讨如何使用JAX-WS创建一个基于Java的WebService服务,这是一种基于标准协议SOAP(Simple Object Access Protocol)和WSDL(Web Services Description Language)的Web应用程序,用于在不同应用…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部