解决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 相关文章推荐
3Z版基于jquery的图片复选框(asp.net+jquery)
Apr 12 Javascript
克隆javascript对象的三个方法小结
Jan 12 Javascript
Js中的onblur和onfocus事件应用介绍
Aug 27 Javascript
javascript实现相同事件名称,不同命名空间的调用方法
Jun 26 Javascript
深入剖析JavaScript编程中的对象概念
Oct 21 Javascript
jQuery Easyui 验证两次密码输入是否相等
May 13 Javascript
浅谈Angular中ngModel的$render
Oct 24 Javascript
完美的js图片轮换效果
Feb 05 Javascript
Vue如何实现组件的源码解析
Jun 08 Javascript
javascript浏览器用户代理检测脚本实现方法
Oct 27 Javascript
基于jQuery实现无缝轮播与左右点击效果
May 13 jQuery
Vue实现多页签组件
Jan 14 Vue.js
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
php日历[测试通过]
2008/03/27 PHP
Yii输入正确验证码却验证失败的解决方法
2017/06/06 PHP
Laravel框架基于ajax实现二级联动功能示例
2019/01/17 PHP
JavaScript Chart 插件整理
2010/06/18 Javascript
javascript 函数参数限制说明
2010/11/19 Javascript
用js调用迅雷下载代码的二种方法
2013/04/15 Javascript
基于JavaScript 声明全局变量的三种方式详解
2013/05/07 Javascript
js判断浏览器是否支持html5
2014/08/17 Javascript
Flexigrid在IE下不显示数据的有效处理方法
2014/09/04 Javascript
requireJS使用指南
2016/04/27 Javascript
nodejs 的 session 简单使用
2016/06/06 NodeJs
angularjs中ng-attr的用法详解
2016/12/31 Javascript
微信小程序中hidden不生效原因的解决办法
2017/04/26 Javascript
Vue中插入HTML代码的方法
2018/09/21 Javascript
PHP实现基于Redis的MessageQueue队列封装操作示例
2019/02/02 Javascript
layer iframe 设置关闭按钮的方法
2019/09/12 Javascript
解决layUI的页面显示不全的问题
2019/09/20 Javascript
在weex中愉快的使用scss的方法步骤
2020/01/02 Javascript
OpenLayers加载缩放控件使用方法详解
2020/09/25 Javascript
理解Python中的With语句
2015/02/02 Python
python 时间戳与格式化时间的转化实现代码
2016/03/23 Python
Python2.7简单连接与操作MySQL的方法
2016/04/27 Python
解决python "No module named pip" 的问题
2018/10/13 Python
pyinstaller打包程序exe踩过的坑
2019/11/19 Python
python 字段拆分详解
2019/12/17 Python
python正则表达式匹配IP代码实例
2019/12/28 Python
Python 调用有道翻译接口实现翻译
2020/03/02 Python
对Matlab中共轭、转置和共轭装置的区别说明
2020/05/11 Python
通过Python pyecharts输出保存图片代码实例
2020/11/25 Python
用HTML5制作一个简单的弹力球游戏
2015/05/12 HTML / CSS
英国在线药房:Express Chemist
2019/03/28 全球购物
护士的岗位职责
2013/12/04 职场文书
广告业务员岗位职责
2015/02/13 职场文书
2016秋季小学开学寄语
2015/12/03 职场文书
详解CocosCreator项目结构机制
2021/04/14 Javascript
react中useState使用:如何实现在当前表格直接更改数据
2022/08/05 Javascript