iEでファイル入力をリセットするにはどうすればよいですか?次を使用しましたが、chromeおよびFFでは機能しましたが、IEでは機能しませんでした
fileInputElement.value=""
IEの代替手段は何ですか?
fileInputElement
がそれ自体でfileInputForm
の形式である場合、次のことができます。
window.fileInputForm.reset();
それ以外の場合、IEの場合、要素をクローンに置き換える必要があります。
fileInputElement.parentNode.replaceChild(
fileInputElement.cloneNode(true),
fileInputElement
);
次のコードは、jQueryで機能しました。すべてのブラウザで機能し、イベントとカスタムプロパティを保持できます。
var $el = $(fileInputElement);
$el.wrap('<form>').closest('form').get(0).reset();
$el.unwrap();
コードとデモンストレーションについては、 this jsFiddle を参照してください。
VanillaJSの@ Gyrocode.comによるクロスブラウザソリューション:
var clearFileInput = function (input) {
if (!input) {
return;
}
// standard way - works for IE 11+, Chrome, Firefox, webkit Opera
input.value = null;
if (input.files && input.files.length && input.parentNode) {
// workaround for IE 10 and lower, pre-webkit Opera
var form = document.createElement('form');
input.parentNode.insertBefore(form, input);
form.appendChild(input);
form.reset();
form.parentNode.insertBefore(input, form);
input.parentNode.removeChild(form);
}
}
ファイル入力を単独でリセットすることはできません。できることは、ファイル入力を_<form id="form_id">
_タグでラップし、フォームをリセットすることです。 jQueryでは$('#form_id')[0].reset();
を実行でき、JavaScriptではdocument.getElementById('form_id').reset()
を実行できます。
IE 1で問題を解決しました:
var file = document.getElementById("file-input");
file.removeAttribute('value');
file.parentNode.replaceChild(file.cloneNode(true),file);
どこ :
<input accept="image/*" onchange="angular.element(this).scope().uploadFile(this)" id="file-input" type="file"/>