【WEB开发.js】addEventListener(‘change‘, ...)监听文件选择事件详解

ops/2024/11/27 23:32:08/

基本语法

element.addEventListener('change', function(event) {// 回调函数逻辑
});
  • element:需要绑定事件的 HTML 元素,通常是文件输入框(<input type="file">)。
  • change:事件类型,当输入框内容改变时触发。
  • function(event):事件触发后的回调函数。event 是事件对象,包含触发事件的相关信息。

文件选择事件的作用

对于 <input type="file"> 类型的元素,change 事件会在以下场景触发:

  1. 用户通过文件选择框选择了一个或多个文件。
  2. 用户清除了文件选择框中的内容(例如点击“取消”)。
  3. 用户选择了与当前文件不同的文件(即“更改”了文件)。

event 对象的重要属性

change 事件中,event 对象包含有关文件选择的相关信息,常用属性如下:

1. event.target

event.target 指向触发事件的元素,即 <input type="file"> 元素。

javascript">const inputElement = event.target;
2. event.target.files

files 是一个 FileList 对象,包含用户选择的文件信息,可以通过索引访问:

javascript">const fileList = event.target.files;
const firstFile = fileList[0]; // 用户选择的第一个文件
3. File 对象

File 对象是文件列表中的每个文件的具体表示,包含以下常用属性:

  • name:文件名称。
  • size:文件大小(以字节为单位)。
  • type:文件 MIME 类型(如 image/pngtext/plain)。
  • lastModified:文件的最后修改时间戳。
javascript">const file = event.target.files[0];
console.log(file.name);  // 输出文件名
console.log(file.size);  // 输出文件大小

应用示例

1. 简单文件选择监听器
javascript"><input type="file" id="fileInput" />
<script>document.getElementById('fileInput').addEventListener('change', function(event) {const file = event.target.files[0]; // 获取第一个文件if (file) {console.log(`文件名: ${file.name}`);console.log(`文件大小: ${file.size} 字节`);console.log(`文件类型: ${file.type}`);} else {console.log('未选择任何文件');}});
</script>
2. 读取文件内容并显示
javascript"><input type="file" id="fileInput" />
<script>document.getElementById('fileInput').addEventListener('change', function(event) {const file = event.target.files[0];if (file) {const reader = new FileReader(); // 创建 FileReader 实例reader.onload = function(e) {console.log('文件内容:', e.target.result); // 打印文件内容};reader.onerror = function(e) {console.error('文件读取错误:', e.target.error);};reader.readAsText(file); // 以文本形式读取文件内容} else {console.log('未选择任何文件');}});
</script>
3. 允许选择多个文件
javascript"><input type="file" id="fileInput" multiple />
<script>document.getElementById('fileInput').addEventListener('change', function(event) {const files = event.target.files; // 获取文件列表for (let i = 0; i < files.length; i++) {console.log(`文件${i + 1}: ${files[i].name} (${files[i].size} 字节)`);}});
</script>

常见注意事项

  1. 多文件选择时的处理

    • 如果 <input>multiple 属性存在,用户可以选择多个文件。此时,files 是一个包含所有选中文件的列表,需要用循环逐个处理。
  2. 文件读取的编码问题

    • 使用 FileReader.readAsText(file, encoding) 读取文件时,确保正确指定编码(如 UTF-8GB2312)。
  3. 文件大小限制

    • 文件上传通常有大小限制,可以通过 file.size 过滤过大的文件:
      javascript">if (file.size > 10 * 1024 * 1024) { // 限制10MBalert('文件过大,无法上传');
      }
      
  4. 类型验证

    • 可以使用 file.type 检查 MIME 类型,确保用户上传的是支持的文件类型:
      javascript">if (!['image/png', 'image/jpeg'].includes(file.type)) {alert('只支持 PNG 和 JPEG 图片');
      }
      

总结

addEventListener('change', ...) 是处理文件输入的关键,用于响应用户选择文件的操作。结合 FileReader 和文件属性(如 namesizetype),可以轻松实现文件读取、类型验证、大小过滤等功能。


http://www.ppmy.cn/ops/137203.html

相关文章

预见未来:学习鸿蒙,筑梦五年后职场蓝海

学习鸿蒙&#xff0c;为五年后的职场铺路 在当今快速发展的科技领域&#xff0c;技术迭代的速度超乎想象。作为未来的职场新人或寻求职业转型的职场人&#xff0c;提前布局、紧跟技术潮流显得尤为重要。鸿蒙&#xff0c;作为华为推出的新一代智能终端操作系统&#xff0c;不仅…

一次电脑感染Synaptics Pointing Device Driver病毒的经历,分享下经验

没想到作为使用电脑多年的老司机也会电脑中病毒&#xff0c;周末玩电脑的时候突然电脑很卡&#xff0c;然后自动重启&#xff0c;奇怪&#xff0c;之前没出现这个情况。 重启后电脑开机等了几十秒&#xff0c;打开任务管理器查看开机进程&#xff0c;果然发现有个Synaptics Po…

ASP网络安全讲述

一 前言   Microsoft Active Server Pages&#xff08;ASP&#xff09;是服务器端脚本编写环境&#xff0c;使用它可以创建和运行动态、交互的 Web 服务器应用程序。使用 ASP 可以组合 HTML 页 、脚本命令和 ActiveX 组件以创建交互的 Web 页和基于 Web 的功能强大的应用程序…

Python 爬虫 (1)基础 | 基础操作

一、基础操作 1、快速构建一个爬虫 ConvertCurl&#xff1a; https://curlconverter.com/选择URL&#xff0c;点击右键&#xff0c;选择 Copy >> Copy as cURL(bash) 2、配置nodejs开发环境 参考WIKI&#xff1a;https://www.jb51.net/python/307069k7q.htm国内npm源…

Leetcode 每日一题 3.无重复字符的最长子串

目录 问题描述 输入输出格式 示例 滑动窗口算法步骤 通过图片 代码实现 复杂度分析 题目地址 注意事项 问题描述 给定一个字符串 s&#xff0c;我们需要找出其中不含有重复字符的最长子串的长度。子串是指字符串中连续的字符序列&#xff0c;而子序列则是字符序列&am…

HTTP代理是什么,主要用来干嘛?

在探讨互联网通信和数据传输的广阔领域中&#xff0c;HTTP代理作为一个重要而广泛使用的工具&#xff0c;扮演着不可或缺的角色。本文将深入浅出地介绍HTTP代理的基本概念、工作原理及其主要应用场景。 一、HTTP代理的基本概念 HTTP代理&#xff0c;简而言之&#xff0c;是一…

C语言蓝桥杯组题目

系列文章目录 文章目录 系列文章目录前言题目第一题.1, 2, 3, 4 能组成多少个互不相同且无重复数字的三位数&#xff1f;都是多少&#xff1f;思路 第二题: 一个整数&#xff0c;它加上100后是一个完全平方数&#xff0c;再加上168又是一个完全平方数&#xff0c;请问该数是多少…

C++:final 关键字用于阻止类被继承或阻止虚函数被进一步重写

final 关键字的作用 C11 引入了 final 关键字&#xff0c;用于阻止类被继承或阻止虚函数被进一步重写。 防止类被继承&#xff1a;在类声明后添加 final&#xff0c;表示该类不能被继承。防止虚函数被重写&#xff1a;在虚函数声明后添加 final&#xff0c;表示该虚函数在派生…