2010-12-15 16 views
1

私は、フォームのセクションをクローンする必要があるクイズ作成フォームを作成しています。jQueryクローンの質問(クローニングフォーム入力セット)

see jsFiddle code example here

私のトラブルは、質問フィールドの新しいセットを追加することが付属しています。 「別の質問を追加」ボタンをクリックすると、複数の回答フィールドが重複し(最初の回答に複数の回答フィールドがある場合)、複製された「別の回答を追加」ボタンは機能しません。

これについてのお手伝いをさせていただきます。

ありがとうございました。

+0

私はあなたが投票した理由を知りません、それは完全に有効な質問ですので、公平を回復するために投票しました。 – Andrey

+0

おかげでAndrey。 1分以内にダウン投票!それが最初です。 – superUntitled

答えて

1

私は物事のカップルをお勧めします。

が空だときには、HTMLのコピーを作成することができます - あなたはすでにの値と何かのクローンを作成することや、それらをクリアする必要が自分自身を保存し、そのように。あなたがすでに持っている空のものだけを複製してください。

質問にはliveも設定されていますが、実際に使用したいと思うのは「回答を追加」ボタンです。 LiveはDOM(あなたがやっている)に追加されたもののハンドラを設定します。これは、最初の回答が機能しないことを除いて、「回答を追加」ボタンを押すたびに表示されます。

var emptyQ = $("li.question").clone(), 
    emptyA = $("li.answer").clone(); 


$("#addQuestion").live('click', function(e) { 
    e.preventDefault(); 
    $('#questioncontainer').append(emptyQ.clone()); 

}); 

$(".addAnswer").live('click', function(e) { 
    e.preventDefault(); 
    $(this).parent().find(".answerContainer").append(emptyA.clone()); 
}); 

の作業例:http://jsfiddle.net/jonathon/Sd9Ag/

私がクリックされたボタンの質問/回答コンテナを取得するために$(this).parent()を使用しています。これは、同じハンドラがすべての人に作用することを意味します。

最後に、違いがあるかどうかわかりませんが、return falseの代わりにe.preventDefault()をクリックハンドラで使用しています。私は知らない - それはよりエレガントだと思う。

+0

深くお答えいただきありがとうございます。これは完全に動作します! – superUntitled

4

ハンドラも同様に複製するには、.clone(true)が必要です。

そして、おそらくあなたのadd another answerハンドラのためにこうしたいと思うでしょう。

$('.answer:last').clone().appendTo($(this).prev().find('.answerContainer')).find("input").val("");  

それ以外の場合は、すべての回答コンテナに追加されます。