如何在文件选择上触发事件

时间:2011-05-09 21:41:17

标签: javascript jquery

我的表格是

<form  onSubmit="return disableForm(this);" action="upload.php" method="post" name="f" id="wizecho" enctype="multipart/form-data">
    <input type="file" name="file" />
    <button onClick="return disableForm(this),ajaxUpload(this.form,'wizecho_upload.php', '&lt;br&gt;Uploading image please wait.....&lt;br&gt;'); return false;">
        Upload Image
    </button>
</form>

上传图片。

在这里,我需要点击按钮上传图片,然后我才能使用onClick事件。我想删除上传按钮,一旦在输入中选择了文件,我就想触发该事件。我该怎么办?

8 个答案:

答案 0 :(得分:109)

在文件输入上使用更改事件。

$("#file").change(function(){
         //submit the form here
 });

答案 1 :(得分:62)

您可以在输入字段上订阅onchange事件:

<input type="file" id="file" name="file" />

然后:

document.getElementById('file').onchange = function() {
    // fire the upload here
};

答案 2 :(得分:38)

这是一个较旧的问题,需要一个更新的答案,以解决@Christopher Thomas在接受答案的评论中所关注的问题。如果您不离开页面然后再次选择文件,则需要在单击或执行touchstart(移动设备)时清除该值。即使您离开页面并使用jquery:

,下面的内容也能正常工作
//the HTML
<input type="file" id="file" name="file" />



//the JavaScript

/*resets the value to address navigating away from the page 
and choosing to upload the same file */ 

$('#file').on('click touchstart' , function(){
    $(this).val('');
});


//Trigger now when you have selected any file 
$("#file").change(function(e) {
    //do whatever you want here
});

答案 3 :(得分:0)

在文件成功加载后执行任何操作。就在文件处理完成后,将文件控件的值设置为空字符串。因此即使文件名更改或不更改,.change()也会始终被调用。例如,您可以做这件事,并像魅力一样为我工作

  $('#myFile').change(function () {
    LoadFile("myFile");//function to do processing of file.
    $('#myFile').val('');// set the value to empty of myfile control.
    });

答案 4 :(得分:0)

vue用户的解决方案,当您多次上传同一文件并且未触发@change事件时解决问题:

 <input
      ref="fileInput"
      type="file"
      @click="onClick"
    />
  methods: {
    onClick() {
       this.$refs.fileInput.value = ''
       // further logic for file...
    }
  }

答案 5 :(得分:0)

onFileChange(e) {
//upload file and then delete it from input 
 self.$refs.inputFile.value = ''
}

答案 6 :(得分:0)

使用es6的香草js

document.querySelector('input[name="file"]').addEventListener('change', (e) => {
 const file = e.target.files[0];
  // todo: use file pointer
});

答案 7 :(得分:0)

<input id="fusk" type="file" name="upload" style="display: none;"
    onChange=" document.getElementById('myForm').submit();"
>