2011-02-25 116 views
1

我有一個表單,用戶可以根據需要動態添加一組字段。對於剛剛複製的最後一個條目和代碼(約工作,爲我的問題here)遞增的字段名的計數器代碼如下:使用datepickers複製HTML元素的jQuery UI日期選擇器

$("#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

我的猜測是它與克隆有關。我知道你可以用動態添加元素的日期選擇器來激活它。試試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