4

私は同様の質問に対するいくつかの答えを見回しましたが、答えを完全には理解していません。

以下のように、いくつかの入力を含むテーブルを含むフォームがあります...

<table class="form right 40 rewardclone_1">
<tr>        
<td><label for="financial_goal_1">Amount</label></td>
<td>Pledge <span class="dollar">&#36;</span><input id="financial_goal_1" class="text dollars" type="text" name="financial_goal_1" /> or more</td>
</tr>
<tr>
    <td><label for="maximum_1">Maximum</label></td>
<td><input id="maximum_1" class="text dollars" type="text" name="maximum_1" /> available (blank for unlimited)</td>
</tr>
<tr>
<td><label for="reward_1">Reward:</label></td>
<td><textarea id="reward_1" name="reward_1"></textarea></td>
</tr>
</table>

クリックするとこのテーブル全体のクローンを作成するボタンを作成できました。

$('#add_reward').click(function() {         
  $('.rewardclone').clone().appendTo('#rewards_container');     
});

問題は、テーブルが複製されるたびにインクリメントするために、属性(reward_1、maximum_1など)のこれらすべての数値が必要なことです。

どんな助けでも大歓迎です!

jQueryレベル:初心者。

ありがとう。

4

3 に答える 3

2

これはあなたの場合の簡単な解決策になります:

$('#add_reward').click(function() {         
    var $x = $('.rewardclone').clone();
    $x.appendTo('#rewards_container');
    $x.find('input[id], textarea[id], label[for]').each(function() {
        if($(this).is('label')) {
            var new_id = parseInt($(this).attr('for').split('_').pop(), 10) + 1;
            $(this).attr('for', new_id);
        } else {
            var new_id = parseInt(this.id.split('_').pop(), 10) + 1;
            this.id = new_id;
        }
    });     
});
于 2012-05-09T01:54:22.050 に答える
2

小さなテーブルなので、クローンを作成して一致する要素を見つけるのではなく、テンプレートとして使用することをお勧めします。

注:サーバーテクノロジーによっては、サーバーからrewardTableTmplを初めてロードしてから、テンプレートを使用してさらに使用することもできます。

デモ

$(function() {
    var rewardTableTmpl = '<table class="form right 40 rewardclone">' +
        '<tr><td><label for="financial_goal_{NUM}">Amount</label></td>' +
        '<td>Pledge <span class="dollar">&#36;</span><input id="financial_goal_{NUM}" class="text dollars" type="text" name="financial_goal_{NUM}" /> or more</td>' +
        '</tr><tr>' +
        '<td><label for="maximum_{NUM}">Maximum</label></td>' +
        '<td><input id="maximum_{NUM}" class="text dollars" type="text" name="maximum_{NUM}" /> available (blank for unlimited)</td>' +
        '</tr><tr>' +
        '<td><label for="reward_{NUM}">Reward:</label></td>' +
        '<td><textarea id="reward_{NUM}" name="reward_{NUM}"></textarea></td>' +
         '</tr></table>';

    $('#add_reward').click(function() {
        $('#rewards_container').append(rewardTableTmpl.replace(/{NUM}/g, $('rewardclone').length + 1));
    });
});
于 2012-05-09T02:00:13.327 に答える
0

{NUM}を印刷しても変わらないので、SelvakumarArumugamの答えを少し調整しました。

$(function() {
    var rewardTableTmpl = '<table class="form right 40 rewardclone">' +
        '<tr><td><label for="financial_goal_{NUM}">Amount</label></td>' +
        '<td>Pledge <span class="dollar">&#36;</span><input id="financial_goal_{NUM}" class="text dollars" type="text" name="financial_goal_{NUM}" /> or more</td>' +
        '</tr><tr>' +
        '<td><label for="maximum_{NUM}">Maximum</label></td>' +
        '<td><input id="maximum_{NUM}" class="text dollars" type="text" name="maximum_{NUM}" /> available (blank for unlimited)</td>' +
        '</tr><tr>' +
        '<td><label for="reward_{NUM}">Reward:</label></td>' +
        '<td><textarea id="reward_{NUM}" name="reward_{NUM}"></textarea></td>' +
         '</tr></table>';

var count =0;
     $('#add_reward').click(function() {
         count++;
        $('#rewards_container').append(rewardTableTmpl.replace(/{NUM}/g, count));
    });

});
于 2017-01-08T18:30:01.663 に答える