如何重置(清除)文件输入

时间:2012-01-25 22:57:03

标签: javascript internet-explorer cross-browser file-io

如何在IE中重置文件输入,我使用以下内容并且它在chrome和FF中工作但不是IE

fileInputElement.value=""

IE中的替代方案是什么?

5 个答案:

答案 0 :(得分:16)

fileInputElement如果fileInputFormwindow.fileInputForm.reset(); 的形式存在,您可以这样做:

fileInputElement.parentNode.replaceChild(
    fileInputElement.cloneNode(true), 
    fileInputElement
);

否则对于IE,你必须用克隆替换元素:

{{1}}

答案 1 :(得分:5)

以下代码适用于jQuery。它适用于每个浏览器,并允许保留事件和自定义属性。

var $el = $(fileInputElement);
$el.wrap('<form>').closest('form').get(0).reset();
$el.unwrap();

样本

请参阅this jsFiddle以获取代码和演示。

LINKS

答案 2 :(得分:4)

您无法自行重置文件输入。您可以做的是将文件输入包装在<form id="form_id">标记中并重置表单。使用jQuery,您可以$('#form_id')[0].reset();,在JavaScript中,您可以执行document.getElementById('form_id').reset()

答案 3 :(得分:4)

@ Gyrocode.com在vanilla JS中的跨浏览器解决方案:

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);
  }

}

答案 4 :(得分:0)

使用 IE 10 我解决了以下问题:

    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"/>