input
タイプfile
要素のHTMLに対してユーザーが行ったすべてのファイル選択を検出する機会はありますか?
これは以前に何度も尋ねられましたがonchange
、ユーザーが同じファイルを再度選択しても、通常提案されるイベントは発生しません。
input
タイプfile
要素のHTMLに対してユーザーが行ったすべてのファイル選択を検出する機会はありますか?
これは以前に何度も尋ねられましたがonchange
、ユーザーが同じファイルを再度選択しても、通常提案されるイベントは発生しません。
各イベントでinput
toの値を設定します。これにより、の値がリセットされ、同じパスが選択されている場合でもイベントがトリガーされます。null
onclick
input
onchange
var input = document.getElementsByTagName('input')[0];
input.onclick = function () {
this.value = null;
};
input.onchange = function () {
console.log(this.value);
};
<input type="file" value="C:\fakepath">
注:ファイルのプレフィックスが「C:\fakepath」の場合は正常です。これは、JavaScriptがファイルの絶対パスを認識できないようにするセキュリティ機能です。ブラウザはまだそれを内部的に知っています。
ユーザーがフィールドをクリックするたびに、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 = ''
}
<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;
これがフィドルです
この記事では、「フォーム入力を使用した選択」というタイトルで
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'にイベントリスナーを追加しますが、テストしたところ、キャンセルした場合ではなく、同じファイルを選択した場合でもトリガーされます。
handleChange({target}) {
const files = target.files
target.value = ''
}
入力の0番目のインデックスの値をクリアすることは私のために働きました。以下のコードを試してみてください。これが機能することを願っています(AngularJs)。
scope.onClick = function() {
input[0].value = "";
input.click();
};
<input #myInput type="file" id="imgFile" (click)="$event.target.value=null"
(change)="detectUploadedImage($event)" accept="image/*" />
ファイルが正常にロードされた後、やりたいことを何でもします。ファイル処理の完了直後に、ファイル制御の値を空白の文字列に設定します。これにより、ファイル名が変更されたかどうかに関係なく、.change()が常に呼び出されます。たとえば、あなたはこのことをすることができ、魅力のように私のために働いた
$('#myFile').change(function () {
LoadFile("myFile");//function to do processing of file.
$('#myFile').val('');// set the value to empty of myfile control.
});
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 = "";
}