文件上传change事件只执行一次的问题

简介: 文件上传change事件只执行一次的问题

参考地址:


https://blog.csdn.net/john_xiaoweige/article/details/81392110


本节中的注意点:


this.$refs.attenceInput.click();
点击a按钮,相当于点击了按钮B本身哦!


input type=”file“ change事件只执行一次的问题
HTML:<input id="file", type="file" onchange="upload()" ref="referenceUpload" />
回调成功方法里:this.$refs.referenceUpload.value = null;
否者成功后不能够进行二次导入哈!


<template>
<div class="upload-panel">
   <div class="panel-heading">考勤导入</div>
   <div class="panel-body">
      <p><strong>注意事项:</strong><br>1、导入文件格式:.xls,.xlsx<br>2、文件命名规则“年月名”,如:“201705运维部考勤”></a></p>
      <p style="margin-top:10px;"><strong>考勤导入:</strong><a class="btn btn-primary btn-xs " @click="chooseFile">选择文件</a></p>
      <p>已选择文件:<em style="color:red; font-style:normal;">{{attence}}</em></p><p>{{info}}</p>
      <input type="file" style="display:none" name="attence"  @change="changeFile($event)" ref="attenceInput" />
   </div>
   <div class="panel-footer">
      <a class="btn btn-primary btn-md" @click="upFile">确认导入</a>
   </div>
</div>
</template>
<script>
   export default {
     name: 'Upload',
     data () {
       return {
         attence: '',
         attenceFile: {}
       }
     },
     methods: {
       chooseFile () {
         this.$refs.attenceInput.click();
       },
       changeFile (e) {
         this.attence = e.target.files[0].name;
         this.attenceFile = e.target.files[0];
       },
       upFile () {
         let filename = this.attenceFile.name;
         let arr = filename.split('.');//这里这样还有点问题  如果别人是2010.23.34.xls这样的命名会出问题的
         if (arr[1] !== 'xls' && arr[1] !== 'xlsx') {
           alter('文件格式错误!');
           return;
         }
         let fileData = new window.FormData();
         fileData.append('file', this.attenceFile);//file参数名。this.attenceFile是参数内容
         // fileData.append('参数key', '内容value');
         let xhr = new window.XMLHttpRequest();
         xhr.open('POST', 'http://localhost:999/base/upload', true);
         xhr.send(fileData);
         xhr.onreadystatechange = () => {
          if (xhr.readyState === 4) {
          if (xhr.status === 200) {
          let response = JSON.parse(xhr.response)
             console.log(response )    
             this.$refs.attenceInput.value = "";//这样才可以进行二次导入
         } else {
             //导入失败的情况
             this.$refs.attenceInput.value = "";//这样才可以进行二次导入
        }
       }
     }
       }
     }
   }
</script>
相关文章
|
7月前
|
前端开发 JavaScript
Layui上传文件时choose事件只触发一次的问题(两种解决方案+最终解决方案源码)
Layui上传文件时choose事件只触发一次的问题(两种解决方案+最终解决方案源码)
351 0
|
JavaScript
jQuery学习(一)—jQuery应用步骤以及ready事件和load事件的区别
jQuery学习(一)—jQuery应用步骤以及ready事件和load事件的区别
|
监控
jedate change事件监控,使用jedate无法使用change事件
jedate change事件监控,使用jedate无法使用change事件
|
前端开发 JavaScript
ajax方法执行同步的黄色警告:Synchronous XMLHttpRequest on the main thread is deprecated的解决方案
ajax方法执行同步的黄色警告:Synchronous XMLHttpRequest on the main thread is deprecated的解决方案
271 0
|
JavaScript
解决input 有多少个radio绑定change事件,手动触发就会执行多少次问题
如题,相信大家都会遇到这个问题,那么为什么会触发多次呢?其实当你用jquery绑定onchange事件的时候你就无形中给每个radio绑定了事件,所以才会出现执行多少次的问题了,那么如何解决呢,其实这个问题就是最好的解决方法了,你想阿,一组radio当然只会选中一个,但是没有 选中的radio也会执...
1318 0
VBS调用keybd_event事件
----------------发送alt+v组合按键----------------------Set Wrap = CreateObject("DynamicWrapper") Wrap.Register "USER32.
1106 0
|
XML 前端开发 JavaScript