a minute ago

input fileで同じファイルを連続で選ぶとonChangeが発火しない問題


事象

<template>
  <input
    @change="onChange"
    accept="image/jpeg, image/png"
    type="file"
    id="file-input"
  >
</template>

Vue.jsでファイルアップロードを実装していて、同じファイルを二度連続で選択するとうまく選択できないことがあります。

input要素が内部に持っているファイルの情報が変わっておらず、onChangeが発火していない為です。

解決方法

やってることは同じですが、2通り対処方法を挙げます。

1. onChangeの最後にvalueを空にする

onChange (e: any) {
    const files = e.target.files || e.dataTransfer.files
    const fileInputElement: HTMLInputElement = <HTMLInputElement>document.getElementById(`input_${this.id}`)
    fileInputElement.value = ''
}

2. onClickでe.target.valueを空にする

<template>
  <input
    @change="onChange"
    accept="image/jpeg, image/png"
    type="file"
    id="file-input"
    @click="(e) => { e.target.value = '' }"
  >
</template>

Related Articles