在Javascript中克隆一个文件input元素
我有一个文件input元素,需要克隆后,用户浏览并select一个file upload。 我开始使用obj.cloneNode(),一切工作正常,直到我试图在IE中使用它。
我从此尝试使用jQuery的克隆方法,如下所示:
var tmp = jQuery('#categoryImageFileInput_'+id).clone(); var clone = tmp[0];
在FireFox中按预期工作,但在IE中却不行。
我卡住了。 任何人有一些build议?
编辑文件表单域是一个安全风险,因此在大多数浏览器上被禁用, 应该在Firefox上禁用。 依靠这个function不是一个好主意。 试想一下,如果有人能够使用JavaScript来改变一个隐藏的file upload字段,比方说,
C:\用户\人\文件\财务
要么
C:\用户\人\应用程序数据\微软\为Outlook.pst
🙂
猜测你需要这个function,所以你可以克隆input元素,并把它放到一个隐藏的窗体,然后将其POST到一个隐藏的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");
在jQuery的fileupload小部件中有一个文件inputreplace方法来绕过变化事件侦听器只发射一次。
https://github.com/blueimp/jQuery-File-Upload/blob/master/js/jquery.fileupload.js#L769
(jquery.fileupload.js中的_replaceFileInput方法)
您可以应用其他方法。 你必须发送真实的元素到一个iframe和克隆的元素插入forms。 例如:
$("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浏览器IEinput文件被复位。