**将来の読者のために**
私は答えを受け入れましたが、この問題は私には解決されていません。ユーザーdbf
は明らかに彼のものを知っており、おそらく彼の答えはあなたのために働くでしょう。そうでない場合は、お詫び申し上げます。水深が深すぎて、これに費やす時間がないので、コードを作り直して、カスタムファイル入力の機能を削除しました。プロジェクトを完了してから、可能であれば、このコードに戻ってソリューションを投稿します。しかし、結局のところ、ユーザーdbf
は多大な労力を費やし、信用に値します。
ajax呼び出しは、フォームタグ内に配置されるテーブル構造を返します。
[行の追加]ボタンは、ファイルをアップロードするためのリンク(アンカータグとしてのカスタムファイル入力)を使用して、テーブルの行を複製します。
ここから、INPUT TYPE=FILE要素をjquery-custom-file-input.jsプラグインに置き換えています。このjqueryプラグインを使用すると、任意の要素をファイル入力要素に変換できるため、ファイル入力要素としてアンカータグを使用し#change_pd
ています。しかし、実際にファイルをアップロードするために、最小限のドキュメントには「入力要素をフォーム要素に添付する」と書かれています。
このStackOverflowの質問はまさにこの問題に対処していますが、私の場合はそれを機能させることができませんでした。
標準の送信ボタンはフォームを送信し、アップロードされたファイルを除くすべてが受信されます。
HTML-AJAXで生成されたテーブルがDIV#reportstable内に挿入されます
<form action="" method="post" name="upd" enctype="multipart/form-data" id="AFrm">
<div id="reportstable">
</div>
</form>
AJAX-返されるテーブルは次のようになります。テーブルは、上記のdiv#reportstable内に配置されます。
<table id="DocTable">
<tr>
<td>New Document</td>
<td>
<span id="span_pd"></span>
<input type="hidden" id="proj_id" name="proj_id" value="'.$project_id.'">
<input type="hidden" id="status_pd" name="status_pd">
</td>
<td>
<a id="change_pd" href="#">change</a>
<input type="hidden" id="new_pd" name="new_pd">
</td>
</tr>
</table>
JQUERY-これはファイルを挿入するためのコードです。選択したファイル名をテキストとしてSPANに入れ、$POSTデータで受信される非表示の入力ファイル#new_pdに入れます。
ただし、ファイル自体はアップロードされません。
.appendTo()を配置する場所、またはjqueryの記述方法がわかりません。これが私が試したことです。.appendTo()を除いてすべてが機能します。
$(document).on('click','#change_pd',function() {
$(this).file().choose(function(e, input) {
$('#new_pd').val(input.val());
$('#span_pd').html(input.val());
$('#span_pd').css('color','grey');
$('#status_pd').val('CHANGED');
});
$(this).css('text-transform','uppercase');
$(input).appendTo('#AFrm').
attr('name', 'a-name').
attr('id', 'an-id');
});
PS-誰かがより良い(好ましい?)カスタムファイル入力プラグインを推薦できるなら、私はすべての耳です。