解决vue项目中type=”file“ change事件只执行一次的问题


Posted in Javascript onMay 16, 2018

问题描述

在最近的项目开发中遇到了这样的一个问题,当我上传了一个文件时,我将获取到的文件名清空后,却无法再次上传相同的文件

<template>
 <div class="hello">
   <input type="button" value="上传文件" name="" id="" @click="updata">
   <input type="file" style="display:none" @change="getFile" id="input-file">
   <div v-if="fileName">
    <p>上传的文件名:{{fileName}}</p>
    <button @click="delFile">清空文件</button>
   </div>
 </div>
</template>
<script>
import $ from 'n-zepto'
export default {
 name: 'HelloWorld',
 data () {
  return {
   fileName: ''
  }
 },
 methods:{
  updata(){ // 唤起change事件
   $('#input-file').click()
  },
  getFile(e){ // change事件
   this.doSomething()
  },
  doSomething(){ // do something
   this.fileName = e.target.files[0].name
  },
  delFile(){
   this.fileName=''
  }
 }
}
</script>

因为我只是将data中的属性值清空而已,文件名没有变当然会不出发change事件

解决办法

目前网上有好多解决办法,但基本上都无法在vue上使用,于是我想到了v-if

v-if 是“真正”的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。

于是在代码中加入了一个小的开关,唤起change事件时就将他销毁

事件结束时再将它重建,这样问题就轻松的解决了

<template>
 <div class="hello">
   <input type="button" value="上传文件" name="" id="" @click="updata">
   <input v-if="ishowFile" type="file" style="display:none" @change="getFile" id="input-file">
   <div v-if="fileName">
    <p>上传的文件名:{{fileName}}</p>
    <button @click="delFile">清空文件</button>
   </div>
 </div>
</template>

<script>
import $ from 'n-zepto'
export default {
 name: 'HelloWorld',
 data () {
  return {
   fileName: '',
   ishowFile: true,
  }
 },
 methods:{
  updata(){ // 唤起change事件
   $('#input-file').click()
   this.ishowFile = false // 销毁
  },
  getFile(e){ // change事件
   this.doSomething()
   this.ishowFile = false // 重建
  },
  doSomething(){ // do something
   this.fileName = e.target.files[0].name
  },
  delFile(){
   this.fileName=''
  }
 }
}
</script>

总结

以上所述是小编给大家介绍的vue项目中解决type=”file“ change事件只执行一次的问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
Oct 24 Javascript
jquery插件制作 图片走廊 gallery
Aug 17 Javascript
根据选择不同的下拉值出现相对应的文本输入框
Aug 01 Javascript
javascript客户端遍历控件与获取父容器对象示例代码
Jan 06 Javascript
Bootstrap入门书籍之(四)菜单、按钮及导航
Feb 17 Javascript
jQuery简单实现仿京东分类导航层效果
Jun 07 Javascript
Vue键盘事件用法总结
Apr 18 Javascript
理解 Node.js 事件驱动机制的原理
Aug 16 Javascript
微信小程序自定义组件
Aug 16 Javascript
微信小程序数据存储与取值详解
Jan 30 Javascript
vue实现点击展开点击收起效果
Apr 27 Javascript
对angular4子路由&amp;辅助路由详解
Oct 09 Javascript
vue-cli与webpack处理静态资源的方法及webpack打包的坑
May 15 #Javascript
JavaScript常用截取字符串的三种方式用法区别实例解析
May 15 #Javascript
vue中keep-alive的用法及问题描述
May 15 #Javascript
react中使用swiper的具体方法
May 15 #Javascript
vue addRoutes实现动态权限路由菜单的示例
May 15 #Javascript
浅谈AngularJS中$http服务的简单用法
May 15 #Javascript
Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案
May 15 #Javascript
You might like
上海牌131型七灯四波段四喇叭一级收音机
2021/03/02 无线电
第十四节--命名空间
2006/11/16 PHP
php mssql 日期出现中文字符的解决方法
2009/03/10 PHP
如何使用php输出时间格式
2013/08/31 PHP
ThinkPHP采用原生query实现关联查询left join实例
2014/12/02 PHP
PHP实现二维数组按某列进行排序的方法
2016/11/18 PHP
PHP实现的贪婪算法实例
2017/10/17 PHP
PHP多个图片压缩成ZIP的方法
2020/08/18 PHP
js函数的引用, 关于内存的开销
2012/09/17 Javascript
JavaScript中按位“异或”运算符使用介绍
2014/03/14 Javascript
jquery马赛克拼接翻转效果代码分享
2015/08/24 Javascript
jQuery简单实现上下,左右滑动的方法
2016/06/01 Javascript
Node.js实现文件上传
2016/07/05 Javascript
JavaScript制作弹出层效果
2016/12/02 Javascript
微信小程序开发图片拖拽实例详解
2017/05/05 Javascript
在Vue中获取组件声明时的name属性方法
2018/09/12 Javascript
vue踩坑记录之数组定义和赋值问题
2019/03/20 Javascript
详解微信小程序开发之formId使用(模板消息)
2019/08/27 Javascript
javascript 对象 与 prototype 原型用法实例分析
2019/11/11 Javascript
Node在Controller层进行数据校验的过程详解
2020/08/28 Javascript
[07:52]2014DOTA2 TI逗比武士游V社解说背后的故事
2014/07/10 DOTA
[05:06]TI4西雅图DOTA2前线报道 海涛密探LGD训练
2014/07/09 DOTA
[01:03:03]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
python实现斐波那契递归函数的方法
2014/09/08 Python
python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别
2018/06/04 Python
NLTK 3.2.4 环境搭建教程
2018/09/19 Python
Django框架视图函数设计示例
2019/07/29 Python
python实现替换word中的关键文字(使用通配符)
2020/02/13 Python
python文件读取失败怎么处理
2020/06/23 Python
Python命令行参数定义及需要注意的地方
2020/11/30 Python
松本清官方海外旗舰店:日本最大的药妆连锁店
2017/11/21 全球购物
美国汽车轮胎和轮毂销售网站:Tire Rack
2018/01/11 全球购物
Stutterheim瑞典:瑞典高级外套时装品牌
2019/06/24 全球购物
印度电子产品购物网站:Vijay Sales
2021/02/16 全球购物
如何在Cookie里面保存Unicode和国际化字符
2013/05/25 面试题
歌剧魅影观后感
2015/06/05 职场文书