【大前端】JavaScript 监听文件选择弹窗关闭事件

前言

在前端文件上传案例中,最常见的就是监听文件选择,而有的时候我们需要知道文件选择框是否已经关闭或点击了取消,传统得change事件只能获取值得更改不能监听取消事件;

监听取消案例:查看下文代码:

export interface SelectFileOptions {
    accept: string;
    capture: string;
    multiple: boolean;
    webkitdirectory: boolean;
}

/**
 * 选择文件
 * @param options
 * @returns
 */
export function selectFile(options?: SelectFileOptions) {
	//这里用异步是因为:文件选择本身就是异步,因为不确定用户什么时候选择文件
    return new Promise((resolve, reject) => {
    	//在内存中创建文件选择框
        const fileEl = document.createElement("input");
        fileEl.type = "file";
		
		//设置属性
        if (options && options.accept) {
            fileEl.accept = options.accept;
        }

        if (options && options.capture) {
            fileEl.capture = options.capture;
        }

        if (options && options.multiple) {
            fileEl.multiple = options.multiple;
        }

        if (options && options.webkitdirectory) {
            fileEl.webkitdirectory = options.webkitdirectory;
        }
        
        //点击,弹出文件选择框
        fileEl.click();
		
		// 监听当前窗体得聚焦事件
		// 文件选择框弹出后:window 会触发blur 事件,关闭后会触发focus聚焦事件
        window.addEventListener("focus", () => {
        	//这里设置定时,是因为focus是在input change事件前面执行,所以这里的定时必须要设置时间间隔,防止方法内部获取files时获取的值为空
            setTimeout(() => {
                if (!fileEl.files?.length) {
                    reject("cancel select");
                } else {
                    resolve(fileEl.files);
                }
            }, 500);
        });
    });
}

export default {};

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
你可以通过以下步骤来实现前端文件上传成功后刷新弹窗并刷新页面的效果: 1. 在 HTML 文件中,创建一个用于文件上传的表单元素: ```html <form id="uploadForm" enctype="multipart/form-data"> <input type="file" name="file" id="fileInput"> <input type="submit" value="Upload"> </form> ``` 2. 使用 JavaScript 监听表单的提交事件,并在提交时执行相应的操作: ```javascript document.getElementById('uploadForm').addEventListener('submit', function(e) { e.preventDefault(); // 阻止默认的表单提交行为 var fileInput = document.getElementById('fileInput'); var file = fileInput.files[0]; if (file) { var formData = new FormData(); formData.append('file', file); // 使用 AJAX 发送文件上传请求 var xhr = new XMLHttpRequest(); xhr.open('POST', '/upload', true); xhr.onload = function() { if (xhr.status === 200) { // 文件上传成功后执行以下操作 alert('文件上传成功'); location.reload(); // 刷新当前页面 } else { alert('文件上传失败'); } }; xhr.send(formData); } }); ``` 在上面的代码中,我们首先获取文件输入框的内容,然后创建一个 FormData 对象,将文件添加到其中。接下来,我们使用 AJAX 发送文件上传请求,并在请求成功时弹出一个成功提示框,然后通过 `location.reload()` 方法刷新当前页面。 请注意,上述示例中的 `/upload` 是一个示意的服务器端接口,你需要根据你的实际情况进行替换。此外,你可能还需要根据你的项目需求对代码进行适当的调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Space Chars

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值