通过JavaScript清除HTML文件上载字段

Chr*_*ess 58 html javascript jquery file-upload

我想在用户选择其他选项时重置文件上载字段.

这可以通过JavaScript实现吗?我怀疑文件上传元素的处理方式不同,因为它与用户的文件系统交互,也许它是不可变的.

基本上,我想要的是(伪代码):

// Choose selecting existing file
$('#select-file').bind('focus', function() {
  // Clear any files currently selected in #upload-file
  $('#upload-file').val(''); 
}) ;

// Choose uploading new one - this works ok
$('#upload-file').bind('focus', function() {
  // Clear any files currently selected in #select-file
  $('#select-file').val(''); 
}) ;
Run Code Online (Sandbox Code Playgroud)

Chr*_*nes 80

您无法在大多数浏览器中设置输入值,但您可以做的是创建一个新元素,从旧元素复制属性,然后交换这两个元素.

给出如下形式:

<form> 
    <input id="fileInput" name="fileInput" type="file" /> 
</form>
Run Code Online (Sandbox Code Playgroud)

直接的DOM方式:

function clearFileInput(id) 
{ 
    var oldInput = document.getElementById(id); 

    var newInput = document.createElement("input"); 

    newInput.type = "file"; 
    newInput.id = oldInput.id; 
    newInput.name = oldInput.name; 
    newInput.className = oldInput.className; 
    newInput.style.cssText = oldInput.style.cssText; 
    // TODO: copy any other relevant attributes 

    oldInput.parentNode.replaceChild(newInput, oldInput); 
}

clearFileInput("fileInput");
Run Code Online (Sandbox Code Playgroud)

简单的DOM方式.这可能不适用于不喜欢文件输入的旧浏览器:

oldInput.parentNode.replaceChild(oldInput.cloneNode(), oldInput);
Run Code Online (Sandbox Code Playgroud)

jQuery方式:

$("#fileInput").replaceWith($("#fileInput").val('').clone(true));

// .val('') required for FF compatibility as per @nmit026
Run Code Online (Sandbox Code Playgroud)

通过jQuery重置整个表单:https://stackoverflow.com/a/13351234/1091947

  • 或者使用jQuery(在`change`事件处理程序中):`$(this).replaceWith($(this).clone(true));` (5认同)

Pra*_*rya 47

现在在2014年,具有id的输入元素支持该功能val('').

对于输入 -

<input type="file" multiple="true" id="File1" name="choose-file" />
Run Code Online (Sandbox Code Playgroud)

这个js清除了输入元素 -

$("#File1").val('');
Run Code Online (Sandbox Code Playgroud)

  • 这适用于所有浏览器,或者至少是大四的过去几个版本吗?我已经看到一些问题,它在FF中工作,但不是IE. (2认同)

Udo*_*Udo 8

是的,上传元素受到保护,不会在不同的浏览器中直接操作.但是,您可以从DOM树中删除该元素,然后通过JavaScript在其位置插入一个新元素.这会给你相同的结果.

有点像:

$('#container-element').html('<input id="upload-file" type="file"/>');
Run Code Online (Sandbox Code Playgroud)


小智 7

简单的解决方案:

document.getElementById("upload-files").value = "";
Run Code Online (Sandbox Code Playgroud)


Chr*_*ess 5

我最终使用的代码是,

clearReviewFileSel: function() {
  var oldInput = document.getElementById('edit-file-upload-review-pdf') ;
  var newInput = document.createElement('input');
  newInput.id    = oldInput.id ;
  newInput.type  = oldInput.type ;
  newInput.name  = oldInput.name ;
  newInput.size  = oldInput.size ;
  newInput.class  = oldInput.class ;
  oldInput.parentNode.replaceChild(newInput, oldInput); 
}
Run Code Online (Sandbox Code Playgroud)

感谢大家的建议和指点!


Fra*_*ens 5

更短的version对我来说是完美的,如下所示:

document.querySelector('#fileUpload').value = "";
Run Code Online (Sandbox Code Playgroud)