是否有机会检测用户为文件元素类型的HTML输入所做的每个文件选择?

这个问题以前被问过很多次,但是如果用户再次选择相同的文件,通常建议的onchange事件不会触发。


当前回答

<form enctype='multipart/form-data'>
    <input onchange="alert(this.value); this.value=null; return false;" type='file'>
    <br>
    <input type='submit' value='Upload'>
</form>

this.value =零;只是必要的Chrome, Firefox将工作良好只是返回false;

这是一把小提琴

其他回答

handleChange({target}) {
    const files = target.files
    target.value = ''
}

在每个onclick事件上将输入值设置为空。这将重置输入的值并触发onchange事件,即使选择了相同的路径。

var input = document.getElementsByTagName('input')[0]; 输入。Onclick = function () { 这一点。Value = null; }; 输入。Onchange = function () { console.log (this.value); }; <input type="file" value="C:\fakepath">

注意:如果你的文件前缀是'C:\fakepath',这是正常的。这是一个安全特性,可以防止JavaScript知道文件的绝对路径。浏览器内部仍然知道它。

选择的答案(使用状态设置输入值null)给了我一个错误。

我使用空字符串代替

    const [fileValue, setFileValue] = React.useState("")

    <input
        onClick={() => {
           setFileValue("");
        }}
        type="file"
        value={fileValue}
        onChange={handleAddFile}
    />


如果你使用的是Angular,双向绑定对我来说是有效的。

这是我的HMTL

<input type="file" #upload name="upload" [(ngModel)]="inputValue"(change)='fileEvent($event)'/>

和TS . .

  @ViewChild('upload') uploadBtn: HTMLElement;

  fileEvent(e: any){
    
   //file upload part... 

    this.inputValue = "";
  }

在本文中,在“使用表单输入进行选择”的标题下

http://www.html5rocks.com/en/tutorials/file/dndfiles/

<input type="file" id="files" name="files[]" multiple />

<script>
function handleFileSelect(evt) {

    var files = evt.target.files; // FileList object

    // files is a FileList of File objects. List some properties.
    var output = [];
    for (var i = 0, f; f = files[i]; i++) {
     // Code to execute for every file selected
    }
    // Code to execute after that

}

document.getElementById('files').addEventListener('change', 
                                                  handleFileSelect, 
                                                  false);
</script>

它添加了一个事件监听器的“改变”,但我测试了它,它触发即使你选择相同的文件,而不是如果你取消。