2011-02-25 11 views
1

私はユーザーが必要に応じて動的にフィールドセットを追加できるフォームを用意しています。それだけでコピー最後のエントリのためのコードとフィールド名(私の質問hereための回避策)でカウンタをインクリメントコードは、次のとおりです。jQuery UI datepickersを持つコピーされたhtml要素のDatepicker

$("#addBeneficiary").click(function(e) { 
    e.preventDefault(); 
    var beneficiary = $(".beneficiary:last").clone(); 
    var count = parseInt(beneficiary.find("input:first").attr("id").match(/\d+/), 10); 
    beneficiary.find("input").each(function(indx, element) { 
     var name = $(element).attr('name').replace(count, count+1), 
      id = $(element).attr('id').replace(count, count+1); 
     $(element).attr('name', name); 
     $(element).attr('id', id); 
     $(element).val(''); 
    }); 

    $("#beneficiaries").append(beneficiary); 
    datepicker(); 
}); 

を最後の行datepicker();はすべてinput.datepickerと実行を見つけるだけの機能ですjQuery UI datepicker()は、これらのフィールドに日付選択ツールを追加します。実行している問題はこれです。最初のフィールドでdatepickerは正常に動作しますが、動的に追加されたときにdatepickerは新しいフィールドにポップアップしません。

私は、datepicker()関数がappendの後に呼び出され、すべてが動作することを保証するために、ロギングステートメントでコード実行をトレースしました。ここに私のdatepicker()コード

var datepicker = function() { 
    $("input.datepicker").datepicker(); 
}; 

誰もが期待どおりに動作していない理由は知っていますか?

+0

コンソールにエラーがありますか?新しく作成された入力を '.datepicker() 'するだけではどうですか? –

+0

エラーが発生していないので、そのような幸運はありませんフォーカスは日付ピッカーを生成しません – Jimmy

答えて

3

私の推測では、クローンと関係があります。私はあなたが動的に追加された要素のためのライブのdatepicker活性化でこれを達成できることを知っています。試しにthis jsfiddleを試してみてください。

$("input.datepicker").live('focus', function(){ 
    var $this = $(this); 
    if(!$this.data('datepicker')) $this.datepicker(); 
}); 
+0

ええ、これは、ユーザーが最初に追加する前にコピーする要素にフォーカスしていない場合、フォーカスのdatepickerを呼び出すだけで動作しません。 – Jimmy

+0

@Jimmy - あなたの話題を再現することはできません。行が追加されるたびにdatepickerを呼び出す必要はなくなりました。それはライブイベントなので 'onready'と呼ばれる必要があります。あなたはその例を試しましたか? –

+0

私は、新しい方法を試して、何かがうまくいくかどうかを確認しようとしていました – Jimmy

関連する問題