2009-08-25 11 views
0

私は、ユーザーが添付ファイル付きのメッセージを作成するためのシンプルなWebアプリケーションを作成しています。 "別のファイルを添付" のリンクがまだ機能しないことjQueryを使用してHTMLフォームを拡張するにはどうすればよいですか?

multiple HTML file inputs with jQuery link http://img39.imageshack.us/img39/4474/attachments.gif

。クリックすると、追加のテーブル行とファイル入力コントロールがフォームに追加されます。

<tr id="fileinput0"> 
    <td>Attachments</td> 
    <td> 
     <input type="file" name="Attachment0" id="Attachment0" /> 
    </td> 
</tr> 
<tr id="fileinput1"> 
    <td></td> 
    <td> 
     <input type="file" name="Attachment1" id="Attachment1" /> 
    </td> 
</tr> 
<tr id="addinput"> 
    <td></td> 
    <td> 
     <a href="#">attach another file</a> 
    </td> 
</tr> 

また、数字を増やす必要があります。fileinput2、Attachment2; fileinput3、Attachment3;

どうすればjQueryでこれを行うことができますか?

+0

関連クエストion:JavaScriptを使用してHTMLフォームを拡張するにはどうすればよいですか? http://stackoverflow.com/questions/1330035/how-do-i-use-javascript-to-grow-an-html-form –

答えて

1

私はそれがすべて、単一のテーブル行の範囲内であったので、それを周りに移動:

<tr> 
    <td>Attachments (<a id="addinput" href="#">add</a>)</td> 
    <td id="fileinputs"> 
     <input type="file" name="Attachment0" id="Attachment0" /> 
    </td> 
</tr> 

そして、これはjQueryを使用:

<script type="text/javascript"> 
    $(document).ready(function() { 
     var num = 0; 
     $("#addinput").click(function() { 
      num++; 
      $("#fileinputs").append("<br /><input type=\"file\" name=\"Attachment" + num + "\" id=\"Attachment" + num + "\" />"); 
     }); 
    }); 
</script> 

それは次のようになります。

multiple HTML file inputs with jQuery link http://img43.imageshack.us/img43/4474/attachments.gif

+0

そのリンクを「追加」または「もっと」にする必要がありますか?または、私はいくつかのonchangeイベントを処理し、そのようなリンクが全くないでしょうか? –

3

フォームに追加するHTMLを作成し、jQuery.append()を使用して適切なコンテナに挿入することができます。

時には私のフォームテーブルにTBODYを保存し、そのTBODYとIDを与えて、余分な行/セル/フォーム入力を追加するためにjQuery経由で参照できるようにすることがあります。

+0

技術的には、最後に「append」が付いていますが、OPが望んでいると思いますそれはどこかの真ん中にある。 – Joel

1

私はこれのようなものを考えます。

inputNum = 2; 

function GrowTable() 
{ 
    var input = $("<tr id=\"fileinput" + inputNum + "\"> 
     <td></td> 
     <td> 
      <input type=\"file\" name=\"Attachment" + inputNum + "\" id=\"Attachment" + inputNum + "\" /> 
     </td> 
    </tr>"); 

    input.insertAfter("#fileinput" + (inputNum - 1)); 

    inputNum++; 
} 
1

カウンタを維持する。これは、あなたが道のほとんどを得るでしょう、

$('form').append("<tr id=\"fileinput" + i + "\"><td></td><td><input type=\"file\" /></td></tr>"); 
4

のようなものを助けるかもしれません。

var row = $('table tr:last').clone(); 
$(row).attr('id', 'new_ID'); 
$('input', row).attr('id', 'new_ID_for_input'); 
$('table').append(row); 
+0

クローンでは良いアイデアだが、 'append'は' after'と交換する必要があります。 – Joel

+0

@Joelなぜですか?その後、テーブルの後に行を配置します(したがって外側に配置します)。テーブル行があるべきであるように、Appendはそれをテーブル内に置きます。 – ceejayoz

+0

しかし、appendは、テーブルの最後の要素として、前回のアップロード行の後とaddinput行の前に配置します。セレクタは '' table tr#lastrowid ''に変更する必要があります。私はまた、2行目から最後の行(または最後の入力行)をクローンするときに、最後の行をクローンしていることに気付きました。 – Joel

関連する問題