2009-05-17 7 views
0

Ok, ich habe eine in Template-Funktion, die über Methode = "POST" gesendet werden. Aber ich kann das nicht normal einreichen, da dies alles ist, was ich möchte, und es ist bereits ein Tag oberhalb des Codes und dann unterhalb des Codes definiert, wobei das Formular geschlossen werden muss, das dort verbleiben muss. Da es keine Möglichkeit gibt, Formulare in Formularen zu verwenden, verwende ich Javascript, um ein Formular zu erstellen und es im Handumdrehen zu senden. Aber ich muss eine Kopie des Dateieingabeelements erhalten, das im document.forms.creator-Formular definiert ist. Ich benutze PHP und Javascript, um das zu erreichen, was ich jetzt habe, aber der cloneNode (true) bekommt das Array $ _FILES ['image'] nicht und setzt es auf das Array $ _FILES ['sigImg'] :(Need File Input Element geklont von 1 Formular in ein anderes über PHP und 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>'; 

Wie kann ich einen echten Klon der Datei-Eingabe definiert im php echo und legen sie sie in der Form, in der createFormAndSubmit() Funktion definiert erhalten ??

bitte jemand helfen ...

+0

Nur um sicherzustellen, dass ich richtig bin zu verstehen, sind Sie wollen eine Datei auf den Server in einem Popup zu schreiben, sondern verweisen nach wie vor, dass die Datei von der Form der ursprünglichen Fensters? Wenn dies der Fall ist, würde einfach das Kind/Iframe das Post-Ziel sein, dann muss ein Skript zurückgegeben werden, um eine ID in ein verstecktes Feld und den Dateinamen in Ihrem Hauptformular anzuhängen. – Tracker1

+0

Nein, ich möchte kein Popup. Ich möchte nur die innerhalb der createFormAndSubmit() - Funktion klonen und den Namen und die ID in: name = "sigImg" id = ändern "sigImgId" und wenn submitForm.submit(); get's heißt, sigImg sollte die $ _FILES ['sigImg'] aus der Bilddatei-Eingabe gesetzt haben. –

+0

ein iframe wird nicht funktionieren, nachdem die Aktion ausgeführt wurde, bringt sie sie zurück auf die Seite, auf der sie sich befanden. Es muss einen Weg geben, um ein Dateieingabeelement zu klonen, so dass, wenn das geklonte Element übergeben wird, es das $ _FILES vom Original gesetzt hat. Ich brauche das, um in der Lage zu sein, die Dateigröße, MIME-Typ, etc. zu überprüfen. –

Antwort

0

Ok, vielen Dank Chris, wird dies auf jeden Fall im Auge behalten. Hatte gerade einen Weg gefunden, um das selbst zu beheben und verwende diese Methode, die nur die Aktion des Formulars ändert und eingibt, nur Problem, es sendet alles in der Form statt nur das Imagefile-Objekt. Aber ich denke, das ist nicht wirklich ein Problem, oder? Auch immer mit diesem Code funktioniert:

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

Dies ändert sich nur die Wirkung der Form ist es bereits in und da diese Funktion nur auf Klicken der Upload-Button verwendet wird und leitet zurück auf die Seite, ist es nicht ein Problem bei der Übermittlung des Formulars normalerweise entweder. Wieder

Thanks :)

0

Der Mark-Allen-Kommentar zu dem anderen Thread weist darauf hin, dass Sie anstelle der neuen geklonten Eingabe (die die ausgewählte Dateieigenschaft nicht angibt) für das andere Formular die alte Eingabe ersetzen mit der neuen Eingabe (die richtig aussieht), und dann legen Sie die alte Eingabe auf Ihrem Upload-Formular.

So würde Ihr Code werden:

// 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);