【发布时间】:2015-08-13 23:16:05
【问题描述】:
我正在寻找一种在 HTML 表单中连续输入多个文件的可能性。令我震惊的是,似乎没有简单的解决方案(或者至少尽管搜索了几个小时,我还是找不到它)。如果我在<input type="file" name="myFiles[]" multiple /> 中使用multiple 属性,我可以按住Ctrl 一次选择多个文件,但是如果我先选择一个文件,然后再次单击输入字段并选择另一个,第二个文件似乎覆盖第一个。
所以我想我可能会尝试使用 javascript 添加更多 <input type="file" name="myFiles[]" /> 字段(同名),因为我在某处看到过类似的东西。我尝试了以下方法:
JavaScript:
function addInputFileEle() {
var field = document.getElementById("filesField");
var row = '<input type="file" name="myFiles[]" onchange="addInputFileEle();" />';
field.innerHTML += row; // add one more <input type="file" .../> element
}
HTML:
<form method="post" action="#" enctype="multipart/form-data">
<fieldset id="filesField"> <!--for adding more file-input rows-->
<input type="file" multiple name="myFiles[]" class="multi" onchange="addInputFileEle();" />
</fieldset>
<input type="submit"/>
</form>
当我单击其中一个并选择一个文件时,该文档确实会创建其他文件输入元素,但是:该文件没有被上传!我的意思是,在我选择文件后,文件名不会显示,而是仍然显示“选择文件”(或“选择文件”,不确定英文)。所以显然我的onchange="addInputFileEle()" 覆盖了正常反应(文件被“加载”到输入元素中)?尽管这对我来说似乎不合逻辑。任何人都可以帮忙吗?为什么文件最终没有被选中?或者也许有比我的更简单的解决方案,这当然会非常受欢迎。提前致谢!
【问题讨论】:
-
看着它,它重新渲染了字段集,因此清除了值。
-
@CodingWithClass 哦,是的,你是对的......这很快,谢谢!你知道这个多文件上传的任何标准解决方案吗?
-
您可以使用 appendChild 而不是 innerHTML。我做了一个相同的解决方案:jsfiddle.net/tfrqwre9
-
尝试查看您的控制台是否记录了任何内容@PeterMöhrenbart
-
@JoshuaK 我按照你的建议使用了 appendChild,现在它可以工作了,非常感谢!!不知何故,我无法使您在小提琴上发布的代码正常工作,那里没有显示新的输入元素(不是 100% 确定我是否按照您的意思使用它)
标签: javascript html file input