是否有机会检测用户为文件元素类型的HTML输入所做的每个文件选择?
这个问题以前被问过很多次,但是如果用户再次选择相同的文件,通常建议的onchange事件不会触发。
是否有机会检测用户为文件元素类型的HTML输入所做的每个文件选择?
这个问题以前被问过很多次,但是如果用户再次选择相同的文件,通常建议的onchange事件不会触发。
当前回答
使用onClick事件清除目标输入的值,每次用户单击字段。这确保onChange事件也将针对同一文件被触发。为我工作过:)
onInputClick = (event) => {
event.target.value = ''
}
<input type="file" onChange={onFileChanged} onClick={onInputClick} />
使用打印稿
onInputClick = ( event: React.MouseEvent<HTMLInputElement, MouseEvent>) => {
const element = event.target as HTMLInputElement
element.value = ''
}
其他回答
选择的答案(使用状态设置输入值null)给了我一个错误。
我使用空字符串代替
const [fileValue, setFileValue] = React.useState("")
<input
onClick={() => {
setFileValue("");
}}
type="file"
value={fileValue}
onChange={handleAddFile}
/>
<input #myInput type="file" id="imgFile" (click)="$event.target.value=null"
(change)="detectUploadedImage($event)" accept="image/*" />
在每个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知道文件的绝对路径。浏览器内部仍然知道它。
在本文中,在“使用表单输入进行选择”的标题下
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>
它添加了一个事件监听器的“改变”,但我测试了它,它触发即使你选择相同的文件,而不是如果你取消。
使用onClick事件清除目标输入的值,每次用户单击字段。这确保onChange事件也将针对同一文件被触发。为我工作过:)
onInputClick = (event) => {
event.target.value = ''
}
<input type="file" onChange={onFileChanged} onClick={onInputClick} />
使用打印稿
onInputClick = ( event: React.MouseEvent<HTMLInputElement, MouseEvent>) => {
const element = event.target as HTMLInputElement
element.value = ''
}