js、vue清空input file的值

起因

vue需求:table每一行都有上传图片按钮,旁边隐藏了input上传文件框,input框中添加change事件,可以给每一行都可以进行上传图片
问题:上一行上传了一张图片后,下面行选择相同的图片就无法上传
原因:input上传的文件未发生改变,所以无法触发change事件
解决:当我们上传时取消掉原来的file值

原生js解决方法

<button class="btn background" @click="addImg()">添加图片</button>
<input v-show="false" type="file" id="file" ref="imgRef"
@change="getImg($event)" multiple="multiplt" 
accept=".png, .jpg, .svg, .gif">
addImg(){ // 上传图片
      if(!this.scopId){ // 如果当前是添加图片非编辑状态 input置空
        let file = document.getElementById('file');
        file.value = '';
      }
      this.$refs.imgRef.click() // 调用隐藏的上传文件的input框
    },

符合vue模式的改进 有ref就不需要id了

<input v-show="false" type="file" ref="imgRef"
@change="getImg($event)" multiple="multiplt"
accept=".png, .jpg, .svg, .gif">
addImg(){ // 上传图片
      if(!this.scopId){ // 如果当前是添加图片非编辑状态 input置空
        this.$refs.imgRef.value =''
      }
      this.$refs.imgRef.click() // 调用隐藏的上传文件的input框
    },

另外:找资料发现还能用 重置file的outerHTML方式实现
但是我测试并没有成功,有没有大佬帮忙指正一下,感激不尽

 addImg(){ // 上传图片
      if(!this.scopId){
        let file = document.getElementById('file');
        // file.value = '';
        file.outerHTML = file.outerHTML; //重置了file的outerHTML
      }
      this.$refs.imgRef.click() // 调用隐藏的上传文件的input框
    },
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值