Вам нужно сделать пару вещей. Во-первых, перед клонированием строки отсоедините поля DatePicker (т.е. внутри обработчика щелчков). Затем повторно инициализируйте их после клонирования строки. Прямо сейчас вы инициализируете первый в обработчике ready () только при первой загрузке страницы, но только что клонированная строка должна быть инициализирована.
Я думаю, что объекты datepicker должны быть отключены перед клонированием, потому что в противном случае, когда вы пытаетесь инициализировать вновь клонированную строку, плагин думает, что он уже инициализирован и прерывается. Кроме того, иногда у вас будет несколько кнопок или изображений рядом с полями ввода DatePicker, если вы не отсоедините их в первую очередь.
$(document).ready(function () {
$('#addNew').click(function () {
// Detach all datepickers before cloning.
$('.datepicker').datepicker('destroy');
var tbody = $('#entries tbody');
var rows = tbody.find('tr').length;
var newRow = tbody.find('tr:first').clone(true).appendTo(tbody);
newRow.find(':input').val('').each(function () {
var id = this.id
if (id) {
this.id = this.id.split('_')[0] + '_' + rows;
}
})
// Reattach all datepickers after cloning.
$('.datepicker').datepicker({
autoSize: true,
changeMonth: true,
changeYear: true,
gotoCurrent: true,
showOn: 'both',
buttonImage: '@Url.Content("~/Content/calendar.png")',
buttonText: 'Choose Treatment Date',
NextText: 'Next',
prevText: 'Previous',
showButtonPanel: true
});
});
// Initial datepicker setup on page load.
$('.datepicker').datepicker({
autoSize: true,
changeMonth: true,
changeYear: true,
gotoCurrent: true,
showOn: 'both',
buttonImage: '@Url.Content("~/Content/calendar.png")',
buttonText: 'Choose Treatment Date',
NextText: 'Next',
prevText: 'Previous',
showButtonPanel: true
});
});