如何重置/清除文件输入

Pet*_*ker 15 types file input reset vue.js

我从 input type=file 重置图像文件时遇到了这个问题。这是场景,我设置了一个图像,然后我点击了“取消”按钮(这意味着它被重置了),然后我将再次设置相同的图像,它不会设置。我不知道为什么,但我认为这是一个错误。

这是我重置图像/表单的代码。

    resetImage () {
  this.$refs.addImageForm.reset()
  this.dialog = ''
  this.imgSrc = ''
  this.fileName = ''
  this.imgUrl = ''
  this.file = ''
}
Run Code Online (Sandbox Code Playgroud)

如果有帮助,我正在使用 Vue.js 和 Vuetify。我希望你能帮助我。我被这个问题困住了

这是 HTML

    <template>
  <v-dialog
    persistent
    v-model="dialog"
    width="600"
  >
    <template v-slot:activator="{ on }">
      <v-btn depressed color="primary" v-on="on">
        <v-icon class="pr-2">check</v-icon>Approve
      </v-btn>
    </template>
    <v-card>
      <div class="px-4 pt-3">
        <span class="subheading font-weight-bold">Approve Details</span>
        <input
          ref="image"
          type="file"
          name="image"
          accept="image/*"
          style="display: none;"
          @change="setImage"
        />
        <v-layout row wrap align-center>
          <v-flex xs12 class="pa-0">
            <div class="text-xs-center">
              <v-img :src="imgUrl" contain/>
            </div>
            <VueCropper
              :dragMode="'none'"
              :viewMode="1"
              :autoCrop="false"
              :zoomOnWheel="false"
              :background="false"
              :src="imgSrc"
              v-show="false"
              ref="cropper"
            />
            <v-form ref="addImageForm" lazy-validation>
              <v-layout row wrap class="pt-2">
                <v-flex xs12>
                  <v-text-field
                    outline
                    readonly
                    :label="imgSrc ? 'Click here to change the image' : 'Click here to upload image'"
                    append-icon='attach_file'
                    :rules="imageRule"
                    v-model='fileName'
                    @click='launchFilePicker'
                  ></v-text-field>
                </v-flex>
              </v-layout>
            </v-form>
          </v-flex>
        </v-layout>
      </div>
      <v-divider></v-divider>
      <v-card-actions class="px-4">
        <v-btn
          large
          flat
          @click="resetImage()"
        >Cancel</v-btn>
        <v-spacer></v-spacer>
        <v-btn
          large
          depressed
          color="primary"
          @click="approveCashout"
          :loading="isUploading"
        >Approve</v-btn>
      </v-card-actions>
    </v-card>
  </v-dialog>
</template>
Run Code Online (Sandbox Code Playgroud)

Pat*_*tik 30

您可以使用 ref 来重置文件上传器值。

this.$refs.fileupload.value=null;
Run Code Online (Sandbox Code Playgroud)

codepen - https://codepen.io/Pratik__007/pen/MWYVjqP?editors=1010

  • 这会引发错误“无法设置未定义的属性‘值’” (3认同)

Asi*_*mov 15

为了重置输入,我让 vue 重新渲染它。只需向输入添加一个键,并在需要清除文件输入时更改该键的值即可。

就像这样:

window.app = new Vue({
  el: '#app',
  data: {
    fileInputKey: 0
  },
  methods:{
    inputChange() {
      console.log('files chosen');
    },
    clear() {
        this.fileInputKey++;
    }
  }
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
  <input type="file" @change="inputChange($event)" :key="fileInputKey"/>
  <button @click="clear">Clear</button>
</div>
Run Code Online (Sandbox Code Playgroud)

  • 在所有解决方案中,这是唯一有效的:) (3认同)

小智 8

我尝试了在 Stackoverflow 上找到的几个建议,但在我的项目中出现了几个错误。解决我的问题的是:

<input type="file" ref="inputFile"/>

this.$refs.inputFile.reset();
Run Code Online (Sandbox Code Playgroud)

上面的这段代码重置了字段值。

  • 当我使用它时,我得到 `TypeError: this.$refs.inputFile.reset is not a function`,但是使用 `this.$refs.inputFile.value=null` 对我有用。 (2认同)

Pra*_*ali 7

我也遇到这个问题,无法重置该值。在浏览了所有以前项目的代码并修改它们之后,我得到了很多可以重置文件输入的方法。如果您想在处理某些代码后执行它,其中一种方法是捕获事件对象。另一种方法是更改​​输入元素的类型,然后再次更改回来。

<div id="app">
  <input type="file" @change="onFilePicked" ref="file">
  <button @click="clear()">Cancel</button>
</div>
Run Code Online (Sandbox Code Playgroud)
var v = new Vue({
    el:'#app',

    data:{},

    methods:{
        clear() { 
            this.$refs.file.type='text';    
            this.$refs.file.type='file'; 
        },
        onFilePicked(event){
            //if you directly want to clear the file input after handling 
            //some code........
            event.target.value=null;
            //OR
            event.target.value='';
        }
    },
});
Run Code Online (Sandbox Code Playgroud)