如何重置 <input type = "file">

IT技术 javascript visual-studio-2012 winjs
2021-01-25 17:06:16

我正在使用 VS2012 和 Javascript 开发 Metro 应用程序

我想重置我的文件输入的内容:

<input type="file" id="uploadCaptureInputFile" class="win-content colors" accept="image/*" />

我该怎么做?

6个回答

@dhaval-marthak 在评论中发布的 jQuery 解决方案显然有效,但如果您查看实际的 jQuery 调用,很容易看出 jQuery 正在做什么,只需将value属性设置为空字符串即可。因此,在“纯”JavaScript 中,它将是:

document.getElementById("uploadCaptureInputFile").value = "";
@jakerella 这很奇怪,对我来说,设置输入文件选择器值会触发安全异常。我成功使用的唯一解决方案是$(#myfileselector).trigger('fileselect', [1, ""]);
2021-03-20 17:06:16
谢谢!如果您已经有了 jquery 引用,$input.val("") 将照常工作。
2021-03-21 17:06:16
@2ndGAB 更正,我的 Firefox 刚刚更新到 46.0.1,这段代码仍然在那里工作。你确定吗?
2021-03-21 17:06:16
@2ndGAB 嗯......我只有 45.0.1 所以我无法测试......还有其他人吗?
2021-03-30 17:06:16
input.type = ''; input.type = '文件'; //请享用
2021-04-01 17:06:16

您需要包装<input type = “file”><form>标签中,然后您可以通过重置表单来重置输入:

onClick="this.form.reset()"
有点酷,但不适合我,因为它还会重置此表单上的其他字段。
2021-03-25 17:06:16
类似的 jQuery 解决方案可能是$("form").get(0).reset();. .get(0)会返回实际的表单元素,所以你可以使用的reset()功能。
2021-03-27 17:06:16
这是正确的方法。它适用于所有浏览器,并且不会与浏览器实施的任何保护措施发生冲突,以防止恶意脚本与文件输入的 .value 混淆。
2021-03-28 17:06:16

这是最好的解决方案:

input.value = ''

if(!/safari/i.test(navigator.userAgent)){
  input.type = ''
  input.type = 'file'
}

在这里的所有答案中,这是最快的解决方案。没有输入克隆,没有表格重置!

我在所有浏览器中检查过它(它甚至支持 IE8)。

这需要更多的投票或其他东西,我花了太长时间才找到这个答案,这是我发现的唯一一个适用于 IE 的答案。
2021-03-14 17:06:16
这个答案不够好。如果输入设置为required,则重置该字段应该会使该字段再次无效。不幸的是,在这种情况下,它仍然有效,因此表单将提交,尽管没有任何value。
2021-03-25 17:06:16
是否有任何特定原因也需要重置input.type仅将值设置''为给出预期结果。
2021-03-26 17:06:16
input.value = '' 在 IE11 中向控制台抛出异常。然而,重置 input.type 适用于所有浏览器,没有任何错误。
2021-03-27 17:06:16
我会将值设置为null,但基本上是一样的。
2021-04-11 17:06:16

如果您有以下情况:

<input type="file" id="fileControl">

然后就做:

$("#fileControl").val('');

重置文件控制。

或者使用 DOM: inputFileEl.value = '';
2021-03-31 17:06:16
在 javascript 源代码中使用“val”是否会导致一些安全问题?
2021-04-02 17:06:16
恕我直言,最佳解决方案。
2021-04-03 17:06:16
@novonimo 不,因为它所做的只是设置输入的值。如果有人愿意,他们可以使用浏览器的 DevTools 来运行 JavaScript。
2021-04-10 17:06:16

另一种解决方案(不选择 HTML DOM 元素)

如果您在该输入上添加了“更改”事件侦听器,则可以在 javascript 代码中调用(对于某些指定条件):

event.target.value = '';

例如在 HTML 中:

<input type="file" onChange="onChangeFunction(event)">

在 javascript 中:

onChangeFunction(event) {
  let fileList = event.target.files;
  let file = fileList[0];
  let extension = file.name.match(/(?<=\.)\w+$/g)[0].toLowerCase(); // assuming that this file has any extension

  if (extension === 'jpg') {
    alert('Good file extension!');
  }
  else {
    event.target.value = '';
    alert('Wrong file extension! File input is cleared.');
  }
angular2 的另一种方法:stackoverflow.com/questions/40165271/...
2021-03-22 17:06:16
这仅适用于.文件扩展名前仅包含一个的文件名。
2021-03-24 17:06:16
没错,我已经编辑了代码并提供了更通用的方法来获取文件扩展名。
2021-04-03 17:06:16