2012-05-15 88 views
0

我已經做了大部分我看到的解決方案,但它不起作用。jQuery動態創建日期選擇器不工作

這裏是我的代碼:

function regenerateDatePickers() 
{ 
    var length = $(".forduplication").length; 
    alert(length); 
    for (var i = 1 ; i <= length ; i++) { 
    $("#endDate" + i).removeClass("hasDatepicker"); 
    $("#endDate" + i).datepicker(); 
    } 
} 

只有原始的日期選擇器領域工作。克隆的不是。 但奇怪的是,我的動態創建的「選擇」*字段正在工作。

*選擇http://harvesthq.github.com/chosen/

編輯 - 添加HTML代碼

<tr class="forduplication"> 
    <td> 
    ... 
    ...<!--lots of other HTML codes--> 
    ... 
    </td> 
    <td><input id="endDate1" name="endDatefield1" size="10"></td> 
    ... 
</tr> 
+4

你能否粘貼你的html或設置一個小提琴(http://jsfiddle.net/),所以我們可以在那裏測試?謝謝。 –

回答

4

更新15年6月1日

.live()不再支持。使用.on()這可以解決。

$('body') 
     .on('click', '.datePick', function() { 
      $(this).datepicker(); 
     }) 
     .on('focus', '.datePick', function() { 
      $(this).datepicker(); 
     }); 

你可以使用livefocusin

對所有輸入字段的一類,在這種情況下,我用datePick作爲類

$('input.datePick').live('focusin', function() { 
    $(this).datepicker(); 
});​ 

希望這有助於

+0

'focusin'和'focus'有什麼區別? –

+0

focusin支持事件冒泡和焦點不對 – Dhiraj

+0

它的工作表示感謝,但我仍然不明白爲什麼我的代碼不起作用,當我認爲它是完全合法的 – MegaNairda

0

做到這一點的一種方法是摧毀並重新分配的每次點擊日期選擇器,但它具有性能自動發出

$('input[id^="endDate"]').live('click', function() { 
    $(this).datepicker('destroy').datepicker({showOn:'focus'}).focus(); 
}); 

它的工作原理,但刪除並您點擊輸入每次添加日期選擇器。所以這是bettter,如果你可以只克隆輸入像

....clone().datepicker('destroy').datepicker({showOn:'focus'}); 

之後做到這一點,然後添加元素,你希望它是。