VueJS:选择同一文件时未触发输入文件选择事件

17
如何在Vue Js中检测相同文件输入的更改?

如果是同一个文件,那就不算是更改。一种选择是在单击输入时清除字段,这样当他们选择文件时,它总是会被视为“更改”。 - Rwd
1
你说得对,因为我想在每次上传文件时触发更改事件,所以要在单击时清除字段。这与jQuery不同,因为它们使用不同的方式访问字段。 - zubair-0
4个回答

38
我们可以添加@click事件,然后清除文件输入框的值。
<template>
    ....
        <input ref="imageUploader" type="file" accept=".jpg, .jpeg" @click="resetImageUploader" @change="uploadImageFile">
    ....
</template>

<script>
    export default {
        methods: {
            resetImageUploader() {
                this.$refs.imageUploader.value = '';
            },
            uploadImageFile() {
                ....
            }
        }
    }
</script>

9
更简单的做法是在uploadImageFile方法的结尾处添加一行代码:this.$refs.imageUploader.value = ''; :) - grreeenn

4

和 @zubair 的答案一样,但对于 vue 3 更加方便:

<input type="file" @change="renderImage($event)" @click="$event.target.value=''">

0

@zubair-0@grreeenn的答案完全有效。在这里,您可以使用空字符串初始化输入值来实现上传文件处理后的实现,因为事件仅在值更改时触发,您可以在Vue 3中使用Template Refs实现此操作。

<template>
  <input
      ref="imageUploader"
      type="file"
      class="custom-file-input"
      name="file-upload"
      accept="image/png, image/gif, image/jpeg"
      @change="uploadImageFile($event)"
    >
</template>
<script>
  import { ref } from 'vue'
  export default {
     setup() {
       const imageUploader = ref(null)
       const uploadImageFile = (event) => {
          console.log('File loaded...')
          // We initialize the input value, this is the trick
          imageUploader.value.value = ''
       }
       return {
         imageUploader,
         uploadImageFile
       }
   }
 }
</script>

0
我用钥匙修好它。例如enter image description here
希望这对你有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接