我有一个文件输入元素,在用户浏览并选择要上传的文件后需要克隆它。我从使用 obj.cloneNode() 开始,一切正常,直到我尝试在 IE 中使用它。
我已经尝试使用 jQuery 的克隆方法如下:
var tmp = jQuery('#categoryImageFileInput_'+id).clone();
var clone = tmp[0];
在 FireFox 中按预期工作,但在 IE 中又不行。
我被困住了。有人有什么建议吗?
我有一个文件输入元素,在用户浏览并选择要上传的文件后需要克隆它。我从使用 obj.cloneNode() 开始,一切正常,直到我尝试在 IE 中使用它。
我已经尝试使用 jQuery 的克隆方法如下:
var tmp = jQuery('#categoryImageFileInput_'+id).clone();
var clone = tmp[0];
在 FireFox 中按预期工作,但在 IE 中又不行。
我被困住了。有人有什么建议吗?
猜测您需要此功能,以便您可以克隆输入元素并将其放入隐藏表单中,然后将其发布到隐藏的 iframe...
IE 的 element.clone() 实现不会继承 input type="file" 的值,所以你必须反过来:
// Clone the "real" input element
var real = $("#categoryImageFileInput_" + id);
var cloned = real.clone(true);
// Put the cloned element directly after the real element
// (the cloned element will take the real input element's place in your UI
// after you move the real element in the next step)
real.hide();
cloned.insertAfter(real);
// Move the real element to the hidden form - you can then submit it
real.appendTo("#some-hidden-form");
编辑文件表单字段存在安全风险,因此在大多数浏览器上被禁用,并且应该在 firefox 上被禁用。依赖此功能不是一个好主意。想象一下,如果有人能够使用 javascript 将隐藏的文件上传字段更改为,可以说,
c:\Users\Person\Documents\Finances
或者
C:\Users\Person\AppData\Microsoft\Outlook.pst
:)
在 jQuery fileupload 小部件中,有一个文件输入替换方法可以绕过仅触发一次的更改事件侦听器。
https://github.com/blueimp/jQuery-File-Upload/blob/master/js/jquery.fileupload.js#L769
(jquery.fileupload.js 中的_replaceFileInput 方法)
您可以应用其他方法。您必须将真实元素发送到 iframe 并将克隆的元素插入到表单中。例如:
$("INPUT[type='file']").each
(
function(index, element)
{
$(this).wrap("<div></div>");
var Div = $(this).parent();
$(this).appendTo("FORM[name='forIframe']"); // This form for iframe
Div.append($(this).clone());
}
);
如果您使用此方法,您的表单会将文件发送到服务器,但只有一个注释,在 Chrome 中,带有文件的 IE 输入被重置。