Forms 需要通过PHP将文件输入元素从一个表单克隆到另一个表单&;Javascript

Forms 需要通过PHP将文件输入元素从一个表单克隆到另一个表单&;Javascript,forms,upload,clone,element,file-io,Forms,Upload,Clone,Element,File Io,好的,我有一个模板内函数,get通过method=“POST”提交。但是我不能正常提交,因为这是我想要提交的全部内容,并且代码上方和下方已经定义了一个标记,用该标记关闭表单时必须保留该标记。由于无法在表单中包含表单,因此我使用Javascript创建一个表单并动态提交它。但是我需要获取document.forms.creator表单中定义的文件输入元素的副本。我正在使用PHP和Javascript来完成我现在拥有的功能,但是cloneNode(true)没有获取$\u FILES['image'

好的,我有一个模板内函数,get通过method=“POST”提交。但是我不能正常提交,因为这是我想要提交的全部内容,并且代码上方和下方已经定义了一个标记,用该标记关闭表单时必须保留该标记。由于无法在表单中包含表单,因此我使用Javascript创建一个表单并动态提交它。但是我需要获取document.forms.creator表单中定义的文件输入元素的副本。我正在使用PHP和Javascript来完成我现在拥有的功能,但是cloneNode(true)没有获取$\u FILES['image']数组并将其设置为$\u FILES['sigImg']数组:(

echo'签名图像旋转器
添加图像:'; 回声' , //然后提交 函数createFormAndSubmit(){ var submitForm=getNewSubmitForm(); var element=document.getElementById(“imagefile”); element=element.cloneNode(true);
element.id=\'sigImgId\';//另一个线程上的Mark Allen注释建议,不要将新的克隆输入(IE不提供所选文件属性)附加到另一个表单,而是将旧输入替换为新输入(看起来合适),然后将旧输入放在上载表单上

因此,您的代码将变成:

// clone up a new one
var oldFile = document.getElementById("imagefile");
var newFile = oldFile.cloneNode(true);

// set props
newFile.id = "sigImgId"; //<- ID Assignment
newFile.name = "sigImg"; //<- NAME Assignment

// replace old with new
oldFile.parentNode.replaceChild(newFile, oldFile);

// attach old to upload form
submitForm.appendChild(oldFile);
//克隆一个新的
var oldFile=document.getElementById(“imagefile”);
var newFile=oldFile.cloneNode(true);
//设置道具

newFile.id=“sigImgId”//好的,非常感谢Chris,他一定会记住这一点。我自己刚刚想出了一个解决方法,我正在使用这个方法,它只是更改表单的操作并提交,唯一的问题是它提交表单中的所有内容,而不仅仅是imagefile对象。但我想这不是一个真正的问题,或者是吗?无论如何,它都可以使用这个方法代码:

// change the action and submit the form...
function submitSigImg(){
 var mainForm = document.forms.creator;
 mainForm.action= "', $scripturl, '?action=sigimages;sa=upload";
 mainForm.submit();
}
这只是改变了它已经存在的表单的操作,因为这个函数只在点击上传按钮并重定向回页面时才被使用,所以在正常提交表单时也不是问题


再次感谢:)

为了确保我理解正确,您希望在弹出窗口中将文件发布到服务器,但仍然引用原始窗口表单中的文件?如果是这样,只需将子/iframe作为发布目标,然后返回一个脚本,将id附加到隐藏字段中,并将文件名添加到主表单中。不,不要需要弹出窗口。只需在createFormAndSubmit()函数中克隆,并将名称和id更改为:name=“sigImg”id=“sigImgId”,并且在调用submitForm.submit();get时,sigImg应该设置$\u文件['sigImg']从图像文件输入。iframe将不起作用,因为在执行操作后,它会将它们直接带回到它们所在的页面。必须有一种方法来克隆文件输入元素,以便在提交克隆的元素时,它已从原始文件设置了$u文件。我需要它,以便能够检查文件大小、mime类型、,等等。这个人马克·艾伦在这里写了一个方法=>但我不明白如何将代码集成到我的代码中…有什么想法吗??
// change the action and submit the form...
function submitSigImg(){
 var mainForm = document.forms.creator;
 mainForm.action= "', $scripturl, '?action=sigimages;sa=upload";
 mainForm.submit();
}