2009-05-17 6 views
0

Хорошо, у меня есть функция шаблона, которая передается через метод = «POST». Но я не могу представить это нормально, так как это все, что я хочу представить, и уже есть тег, определенный над кодом, а не ниже кода, закрытие формы с этим должно оставаться там. Поскольку в формах нет способов иметь формы, я использую Javascript для создания формы и отправки ее на лету. Но мне нужно получить копию элемента ввода файла, определенного в форме document.forms.creator. Я использую PHP и Javascript для выполнения того, что у меня есть сейчас, но cloneNode (true) не получает массив $ _FILES ['image'] и не устанавливает его в массив $ _FILES ['sigImg'] :(Необходимый элемент ввода данных, клонированный из 1-й формы в другую с помощью PHP и Javascript

echo '<tr><td colspan="2"><a href="#" name="sig' . $user_info['id'] . '"></a><center><b>Signature Image Rotator</b></center><br /><center> 
Add Image: <input type="file" size="48" id="imagefile" name="image" />&nbsp;&nbsp;<input type="button" value="Upload" onclick="createFormAndSubmit()"></center>'; 


echo ' 
<script language="JavaScript" type="text/javascript"><!-- // --><![CDATA[ 
//helper function to create the form 
function getNewSubmitForm(){ 
var submitForm = document.createElement("FORM"); 
document.body.appendChild(submitForm); 
submitForm.enctype = "multipart/form-data"; 
submitForm.method = "POST"; 
return submitForm; 
} 

//function that creates the form, clones <input type="file" name="image">, 
//and then submits it 
function createFormAndSubmit(){ 
var submitForm = getNewSubmitForm(); 
var element = document.getElementById("imagefile"); 
    element = element.cloneNode(true); 
    element.id = \'sigImgId\'; //<- ID Assignment 
    element.name = \'sigImg\'; //<- NAME Assignment 
    submitForm.appendChild(element); 
submitForm.action= "', $scripturl, '?action=sigimages;sa=upload"; 
submitForm.submit(); 
} 
// ]]></script></td></tr>'; 

Как я могу получить реальный клон входного файла, определенного в PHP эхо и поместить его в форме, определенной в функции createFormAndSubmit() ??

Пожалуйста, кто-нибудь помочь ...

+0

Просто, чтобы убедиться, что я правильно понять, вы желаете, чтобы отправить файлы на сервер во всплывающем окне, но по-прежнему ссылаться на этот файл из формы исходного окна? Если это так, просто нужно, чтобы child/iframe был пост-объектом, затем возвращайте сценарий для добавления идентификатора в скрытое поле и имя файла в вашей основной форме. – Tracker1

+0

Нет, не нужно всплывающее окно. Просто хочу клонировать внутри функции createFormAndSubmit() и изменить имя и идентификатор на: name = "sigImg" id = «sigImgId» и когда submitForm.submit(); get's, sigImg должен был установить $ _FILES ['sigImg'] из ввода файла изображения. – 2009-05-17 06:25:51

+0

iframe не будет работать после того, как действие будет выполнено, оно вернет их обратно на страницу, на которой они были. Должен быть способ клонирования элемента ввода файла, чтобы при отправке клонированного элемента он установил $ _FILES из оригинала. Мне нужно это, чтобы иметь возможность проверять размер файла, тип mime и т. Д. – 2009-05-17 06:34:16

ответ

0

Хорошо, спасибо Крис, безусловно, имейте это в виду. Просто вычислил способ исправить это сам, и я использую этот метод, который просто изменяет действие формы и отправляет, только проблема представляет все в форме, а не только объект imagefile. Но я думаю, что это не проблема, или не так ли? В любом случае работы с этим кодом:

// change the action and submit the form... 
function submitSigImg(){ 
var mainForm = document.forms.creator; 
mainForm.action= "', $scripturl, '?action=sigimages;sa=upload"; 
mainForm.submit(); 
} 

Это просто изменяет действие формы оно уже и так как эта функция только привыкает на нажатия кнопки загрузки и перенаправляет обратно на страницу, это не проблема при отправке формы обычно тоже.

Еще раз спасибо :)

0

Комментарий Марка Аллена к другому потоку предполагает, что вместо добавления вашего нового клонированного ввода (который 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);