Нужен элемент ввода файла, клонированный из одной формы в другую через PHP и Javascript - PullRequest
0 голосов
/ 17 мая 2009

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

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 echo, и поместить его в форму, определенную в функции createFormAndSubmit () ??

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

Ответы [ 2 ]

0 голосов
/ 20 мая 2009

Хорошо, большое спасибо, Крис, обязательно учту это. Я только что нашел способ исправить это сам и использую этот метод, который просто меняет действие формы и отправляет, единственная проблема - она ​​передает все в форме, а не просто объект 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 голосов
/ 19 мая 2009

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