0

わかりました、method="POST" を介して送信されるテンプレート関数があります。しかし、これは私が提出したいすべてであり、コードの上とコードの下よりも上に定義されたタグが既に存在するため、これを正常に送信することはできません。フォーム内にフォームを配置する方法がないため、Javascript を使用してフォームを作成し、その場で送信しています。しかし、document.forms.creator フォームで定義されている file 入力要素のコピーを取得する必要があります。私は現在持っているものを達成するために 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 エコーで定義されたファイル入力の実際のクローンを取得し、それを createFormAndSubmit() 関数で定義されたフォームに配置するにはどうすればよいですか??

お願い、誰か助けて…

4

2 に答える 2

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();
}

これは、すでにあるフォームのアクションを変更するだけであり、この機能はアップロードボタンをクリックしたときにのみ使用され、ページにリダイレクトされるため、フォームを通常どおり送信する場合にも問題はありません。

再度、感謝します :)

于 2009-05-20T05:31:27.853 に答える
0

他のスレッドに関する 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);
于 2009-05-19T14:34:59.840 に答える