Проблема в том, как вы инициализируете свой datepicker.
Вы используете анонимную функцию для регистрации datepicker
$(function () {
$( "#startDate" ).datepicker({
dateFormat: 'dd-mm-yy',
changeMonth: true,
changeYear: true,
showAnim: 'slideDown',
duration: 'fast',
yearRange: new Date().getFullYear() + ':' + new Date().getFullYear(),
});
// ...
});
, которая работает для элементов, которые уже существуют на странице, когда функция работает, но вы динамически добавляете элементы на страницу после инициализации, поэтому datepicker не будет там регистрироваться.
Вы можете узнать, как зарегистрировать datepicker для динамически добавляемых элементов в этом ответе SO: { ссылка }
- РЕДАКТИРОВАТЬ
В вашем случае первое, что вам нужно сделать, это удалить идентификаторы start_date
и end_date
и вместо этого добавить что-то вроде теги данных, так как добавление одного и того же идентификатора несколько раз к одной и той же странице не допускается.
Таким образом, вы можете изменить код для добавления новых строк (обратите внимание на data-datepicker"
на входах):
function addRow() {
var addRow = '<tr>\n' +
' <td><div class="input-group"><div class="input-group-prepend"><span class="input-group-text"><i class="far fa-calendar-alt"></i></span></div><input type="text" placeholder="dd/mm/yyyy" readonly autocomplete="off" name="start_date[]" class="form-control" data-datepicker></div></td>\n' +
' <td><div class="input-group"><div class="input-group-prepend"><span class="input-group-text"><i class="far fa-calendar-alt"></i></span></div><input type="text" placeholder="dd/mm/yyyy" readonly autocomplete="off" name="end_date[]" class="form-control" data-datepicker></div></td>\n' +
' <td><a class="btn btn-danger remove"> <i class="fa fa-times"></i></a></td>\n' +
' </tr>';
$('tbody').append(addRow);
addRemoveListener();
};
Вам также следует изменить часть id=
в вашем html на data-datepicker
.
Теперь у вас есть способ универсально настроить таргетинг на компоненты, которые должны запускать ваш datepicker, так что y Вы можете изменить свою функцию инициализации на
$(function () {
$('body').on('focus',"[data-datepicker]", function(){
$(this).datepicker({
dateFormat: 'dd-mm-yy',
changeMonth: true,
changeYear: true,
showAnim: 'slideDown',
duration: 'fast',
yearRange: new Date().getFullYear() + ':' + new Date().getFullYear(),
});
});
});
Объяснение:
Теперь мы регистрируем глобальный прослушиватель событий на объекте body, который прослушивает событие focus
, которое запускается, когда вы введите что-то вроде ввода текста. Второй параметр функции on
позволяет нам фильтровать только те элементы, которые нас интересуют. В вашем случае элементы с атрибутом data-datepicker
. Затем мы инициализируем datepicker для этого объекта.
Вы можете прочитать все о функции on
в jQuery документации https://api.jquery.com/on/