【发布时间】:2012-01-11 17:24:12
【问题描述】:
我正在用 javascript 创建一个上传控件,然后使用element.click() 来打开文件浏览器对话框。
function add(type) {
var element = document.createElement("input");
element.setAttribute("type", type);
element.setAttribute("value", type);
element.setAttribute("name", type);
element.setAttribute("id", "element-" + i);
var removebutton = document.createElement('a');
var removeimage = document.createElement('img');
removeimage.setAttribute("width", 15);
removeimage.setAttribute("height", 15);
removeimage.setAttribute("class", "removebutton");
removeimage.src = "/Content/Images/redx.png";
removebutton.appendChild(removeimage);
removebutton.setAttribute("id", "remove-" + i);
removebutton.setAttribute("onclick", "remove(" + i + "); return 0;");
var newfile = document.getElementById("uploadhere");
//newfile.appendChild(removebutton);
newfile.appendChild(element);
newfile.appendChild(removebutton);
element.click();
i++;
}
文件浏览器对话框按预期出现,但在我在表单上选择提交后,输入到控件中的任何文件都会消失。
如果我点击“浏览”,我会看到文件浏览器对话框,但文件会正确上传。
如何将文件上传控件添加到我的表单并让它显示文件浏览器对话框并仍然按预期工作。
【问题讨论】:
-
请在jsfiddle.net添加示例
-
你的变量“i”是在哪里定义的?这是一个粗略的jsFiddle,定义了“i”。我看到的另一个问题是您也没有向我们展示 remove() 函数。
-
我一直明白你不能编写上传元素的脚本,因为如果你能做到这一点,你可能会做很多侵犯隐私的技巧。但也许自从我研究它以来,这种情况已经改变了?
-
我没有包含删除,因为它按预期工作。我认为安说得对。
-
顺便说一句,您一次创建和附加一个 DOM 元素,这将导致浏览器多次重排。考虑使用
document.createDocumentFragment创建一个document fragment,然后将新元素添加到片段中,最后将片段本身添加到DOM 本身的正确位置。这样只会触发一次回流,效率更高。
标签: javascript