2010-12-16 11 views
5

フォームフィールドのセットを複製できるフォームがあります(http://jsfiddle.net/Sd9Ag/8/参照)。入力が重複している場合、どのようにname属性の配列番号をインクリメントしますか?例えばフォームフィールドが複製されるときに多次元配列をインクリメントします。

<input type="input" name="question[1]" /> 
<input type="input" name="questionURL[1]" /> 
<input type="input" name="answer[1][]" /> 
<input type="input" name="answerURL[1][]" /> 

そして、それがクローン化され、配列番号インクリメント:

<input type="input" name="question[2]" /> 
<input type="input" name="questionURL[2]" /> 
<input type="input" name="answer[2][]" /> 
<input type="input" name="answerURL[2][]" /> 

を質問と回答がグループ化されているように、私はこれを行うために必要な理由がありますフォームが提出されます。

+0

ためhttp://www.jsfiddle.net/gaby/WZAU6/

基準で

例なぜ '質問[1] []' 'だけ質問[1]'ありません。唯一の繰り返し項目は答えのようです。 – Stephen

+0

スティーブン、いい点。私はこの眩しいエラーを修正するために質問を更新します。 – superUntitled

+0

質問[]、回答[]などの代わりに数字を使う必要があるのはなぜですか? –

答えて

5

更新

[OK]を、私は私の中で逃したあなたのjsfiddle(を使用していました最初の答えは)コードを変更していくつかの変更を加えました。私は答えとの混同を避けるためにqnote[1]に改名質問のノートが

  • 回答は最初の質問に対する最初の回答のためanswer[1][1]、最初の質問の2番目の答えをanswer[1][2] ...最初の答えのためのanswer[2][1]として命名されているノート

    • 2番目の質問、など。コードを作業

    http://jsfiddle.net/dcUdU/1/


    での

    元答え

    使用

    (あなたがフィールドの最後のグループからcloneに必要)あなたはクローン化されている入力要素のeach次のコード

    elem.name = elem.name.replace(/\[(\d+)\]/,function(str,p1){ 
         return '[' + (parseInt(p1,10)+1) + ']'; 
         }); 
    

    正規表現を使用してと]の中の番号を見つけ、1つずつインクリメントします。 function as parameter to the replace method

  • +0

    Gabyさん、ありがとう、これは私のjsFiddleの例では動作しません。 – superUntitled

    +0

    @super無題、更新された回答。 –

    +0

    完璧、ありがとうございます。今私は何が起こっているのか把握するために、この美しさを研究しなければなりません!ありがとう、あなたは私に学ぶために全く新しい一連の関数をくれました! – superUntitled

    1

    は、この1を見てください:http://jsfiddle.net/sje397/z3SSL/1/

    主な変更点はこれです:

    var emptyQ = $("li.question").clone(), 
        emptyA = $("li.answer").clone(); 
    
    emptyQ.html(emptyQ.html() 
           .replace("question[" + (nextId - 1), "question[" + nextId) 
           .replace("qnotes[" + (nextId - 1), "qnotes[" + nextId)); 
    emptyA.html(emptyA.html() 
           .replace("answer[" + (nextId - 1), "answer[" + nextId) 
           .replace("anotes[" + (nextId - 1), "anotes[" + nextId)); 
    
    +0

    助けてくれてありがとう!あなたが提供した例は動作していません!フォーム入力セットはもはや正しく複製されません。 – superUntitled

    +0

    @super無題:私は自分の答えを更新しました。 – sje397

    +0

    これはうまくいくようですが、複数の質問が複製された場合、その数は常に2です。インデックスを格納する方法はありますか?すごい!これはマインドベンダーです! – superUntitled