解决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 相关文章推荐
IE iframe的onload方法分析小结
Jan 07 Javascript
js querySelector和getElementById通过id获取元素的区别
Apr 20 Javascript
jQuery方法简洁实现隔行换色及toggleClass的使用
Mar 15 Javascript
jQuery插件开发详细教程
Jun 06 Javascript
jquery获取多个checkbox的值异步提交给php
Jul 07 Javascript
Node.js 文件夹目录结构创建实例代码
Jul 08 Javascript
BootStrap按钮标签及基本样式
Nov 23 Javascript
微信小程序城市定位的实现实例(获取当前所在国家城市信息)
May 17 Javascript
微信小程序下拉刷新界面的实现
Sep 28 Javascript
JS散列表碰撞处理、开链法、HashTable散列示例
Feb 08 Javascript
JsonProperty 的使用方法详解
Oct 11 Javascript
vue实现列表垂直无缝滚动
Apr 08 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运行环境(Apache配置、Mysql)搭建安装图文教程
2016/04/12 PHP
用PHP写的一个冒泡排序法的函数简单实例
2016/05/26 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
2016/09/11 PHP
PHP常见字符串操作函数与用法总结
2019/03/04 PHP
PHP mkdir创建文件夹实现方法解析
2020/11/13 PHP
JS在IE和FireFox之间常用函数的区别小结
2010/03/12 Javascript
js的onload事件及初始化按钮事件示例代码
2013/09/25 Javascript
javascript实现的多个层切换效果通用函数实例
2015/07/06 Javascript
再谈Javascript中的基本类型和引用类型(推荐)
2016/07/01 Javascript
AngularJS实现页面跳转后自动弹出对话框实例代码
2017/08/02 Javascript
webpack打包并将文件加载到指定的位置方法
2018/02/22 Javascript
基于python脚本实现软件的注册功能(机器码+注册码机制)
2016/10/09 Python
Python 安装setuptools和pip工具操作方法(必看)
2017/05/22 Python
Python的numpy库中将矩阵转换为列表等函数的方法
2018/04/04 Python
python pandas实现excel转为html格式的方法
2018/10/23 Python
对Pyhon实现静态变量全局变量的方法详解
2019/01/11 Python
python实现狄克斯特拉算法
2019/01/17 Python
导入tensorflow:ImportError: libcublas.so.9.0 报错
2020/01/06 Python
pytorch 修改预训练model实例
2020/01/18 Python
快速解决jupyter启动卡死的问题
2020/04/10 Python
浅谈keras 模型用于预测时的注意事项
2020/06/27 Python
详解torch.Tensor的4种乘法
2020/09/03 Python
Selenium Webdriver元素定位的八种常用方式(小结)
2021/01/13 Python
使用CSS3来绘制一个月食图案
2015/07/18 HTML / CSS
介绍一下EJB的体系结构
2012/08/01 面试题
J2EE中的容器都包括哪些
2013/08/21 面试题
自我鉴定书范文
2013/10/02 职场文书
怎样写好自荐信和推荐信
2013/12/26 职场文书
挑战杯创业计划书的写作指南
2014/01/07 职场文书
表演方阵解说词
2014/02/08 职场文书
代理人委托书
2014/09/16 职场文书
2014年科协工作总结
2014/12/09 职场文书
2016年重阳节慰问信
2015/12/01 职场文书
Python图像处理之图像拼接
2021/04/28 Python
oracle连接ODBC sqlserver数据源的详细步骤
2021/07/25 Oracle
使用MybatisPlus打印sql语句
2022/04/22 SQL Server