• 原生JS上传文件夹,阻止浏览器默认弹窗(上传文件夹的弹窗)


    最近在工作中遇到一个上传文档的需求,用elementUI组件没有上传文件夹功能,只有上传文档功能,在开发过程中遇到如下几个问题,在此总结一下。

    1、input框支持上传文件夹,必须要在input标签添加webkitdirectory属性。(上传文件夹功能不是所有浏览器都支持)

    <input type="file" webkitdirectory />

    2、项目需求:第一次点击长传文件夹长传成功之后,第二次点击给出提示框,只能长传一次。在这里我一开始的思路是input触发的onchange事件,去onchange事件监听阻止掉默认行为,后来才发现点击input框之后,给的上传文件夹弹窗是在click事件的时候触发的,所以想要阻止掉浏览器弹窗,就在input标签上绑定一个click事件,在click事件中阻止浏览器默认行为,弹窗就不会出现。以下代码是以vue框架为基础写的。

    1)在input标签绑定一个click事件

    <input type="file" webkitdirectory @click="fileUploadCheck">

    2)在methods里面给这个方法做出相应的校验,满足需求阻止浏览器默认行为

    fileUploadCheck(){
         // .....根据项目需求做校验,满足条件阻止浏览器默认行为
         if(e&&e.preventDefault) {
           e.preventDefault();
         }
    
       }

    3、如果想要阻止elementUI的上传文档组件的弹窗,我们还得通过JS获取到input元素,给他添加一个click事件。在这里我遇到一个问题是,通过原生JS给元素绑定事件,在if判断里不能移除此次事件,上传文档的弹窗被阻止之后,就一致被阻止掉。我想要条件允许时,给这个弹窗又可以出现。最终我给他添加绑定事件的时候,下一句代码就移除这个事件。

     fileUploadCheck(){
          let inputFile = document.getElementById('inputfile') //获取到input框
          let hanle = function(event){  //阻止浏览器默认事件
            if(event.preventDefault && event){
              event.preventDefault()
            }
          }
          if(!this.flag){ //此变量是判断是否已经上传文件
            inputFile.addEventListener('click',hanle,false)  //满足条件给input绑定事件
            this.$message('文档和文件夹只能上传一次')
            setTimeout(function(){
              inputFile.removeEventListener('click',hanle,false)  //移除事件
            },500)
          }else {
            //如果将 inputFile.removeEventListener('click',hanle,false)写在else,不能移除hanle事件
          }
        }
     
  • 相关阅读:
    http-server -S 开启 https 服务
    material-ui react的ui框架 有时间可以看看 chia用的前台ui
    关于vue.js:iview-Bug-5114在iview的Poptip气泡提示内调用DatePicker出现遮挡或同时关闭窗口等冲突问题[转]
    coding 的pages 静态要六分钱一个月,我也是醉了。
    jeesite 有时间看看
    选择单词后 按 ctrl + space 单词发音
    什么是CI/CD
    PostCSS深入学习: PostCSS和Sass、Stylus或LESS一起使用
    浅析requestAnimationFrame
    webpack性能优化
  • 原文地址:https://www.cnblogs.com/chip-gan/p/11258908.html
Copyright © 2020-2023  润新知