タイプinput
要素のHTML file
に対してユーザーが行ったすべてのファイル選択を検出する機会はありますか?
これは以前何度も尋ねられましたが、通常提案されているonchange
イベントは、ユーザーが同じファイルを再度選択しても起動しません。
各input
イベントでnull
の値をonclick
に設定します。これにより、input
の値がリセットされ、同じパスが選択されている場合でもonchange
イベントがトリガーされます。
input.onclick = function () {
this.value = null;
};
input.onchange = function () {
alert(this.value);
};
DEMO です。
注:ファイルの先頭に「C:\ fakepath \」が付いている場合は正常です。これは、JavaScriptがファイルの絶対パスを認識できないようにするセキュリティ機能です。ブラウザはまだ内部的に認識しています。
<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=null;
はChromeにのみ必要です。Firefoxはreturn false;
で正常に動作します
これは FIDDLE です
この記事では、「選択のためのフォーム入力の使用」というタイトルの下で
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>
'change'にイベントリスナーを追加しますが、同じファイルを選択し、キャンセルしない場合でもトリガーします。
ファイルが正常に読み込まれた後、ファイル処理の完了後、ファイルコントロールの値を空の文字列に設定した後、ファイル名が変更されてもされなくても、.change()が常に呼び出されます。たとえば、あなたはこのことを行うことができ、魅力のように私のために働いたような
$('#myFile').change(function () {
LoadFile("myFile");//function to do processing of file.
$('#myFile').val('');// set the value to empty of myfile control.
});
ユーザーがフィールドをクリックするたびに、onClickイベントを使用してターゲット入力の値をクリアします。これにより、同じファイルに対してonChangeイベントもトリガーされます。私のために働いた:)
onInputClick = (event) => {
event.target.value = ''
}
<input type="file" onChange={onFileChanged} onClick={onInputClick} />
TypeScriptを使用する
onInputClick = ( event: React.MouseEvent<HTMLInputElement, MouseEvent>) => {
const element = event.target as HTMLInputElement
element.value = ''
}