Динамически генерируя DatePicker jQuery с Altfields
-
01-10-2019 - |
Вопрос
Я динамически генерирую датусикер, просто добавив поле HTML в Div:
<input type="text" value="" readonly="readonly" name="tier[2][publication_date]" id="publication_date_2" size="10" maxlength="10" tabindex="6" class="publication_date hasDatepicker">
<input type="hidden" name="tier[2][publication_date_db]" id="publication_date_db_2" value="">
Из-за того, как мы храним даты, у нас есть отдельное поле (Altfield) для DatePicker, которое хранит нашу дату отформатированной базы данных, выбранную пользователем.
Чтобы обрабатывать выбор нескольких собора даты, которые я назначаю класс и использую LiveQuary, чтобы обнаружить onClicks после нагрузки страницы:
$(".publication_date").livequery(function() {
$(this).datepicker({
dateFormat: "dd M yy",
changeYear: true,
changeMonth: true,
onSelect: function(dateText, inst) {
console.log(inst);
}
});
});
У меня проблема в этом, как DatePicker знает, какой Altfield заполняет? На одном DatePicker обычно включают в себя:
altField: '#start_date_datepicker_altfield',
altFormat: 'yy-mm-dd',
для населения произойдет.
Решение
Я знаю, что документация говорит, что она берет селектор, но он также может взять объект jQuery, поэтому просто используйте $(this).next()
Чтобы получить скрытое поле, как это:
$(".publication_date").livequery(function() {
$(this).datepicker({
altField: $(this).next(),
altFormat: 'yy-mm-dd',
dateFormat: "dd M yy",
changeYear: true,
changeMonth: true,
onSelect: function(dateText, inst) {
console.log(inst);
}
});
});
Поскольку большинство плагинов сводится к $(input)
Этот вход может быть селектором или объект jQuery или элемент DOM, и он все еще будет работать просто хорошо :)
Другие советы
Я не использовал LiveQuery, но из внешнего вида, вы можете получить id
соответствующего элемента из this.id
. Отказ В вашем примере HTML, это будет «publication_date_2», из которого относительно легко создать необходимый идентификатор для Altfield «publication_date_db_2» (вы можете сделать его еще проще, изменив свою стратегию названия поля).
Так что возможно:
$(".publication_date").livequery(function() {
$(this).datepicker({
dateFormat: "dd M yy",
changeYear: true,
changeMonth: true,
onSelect: function(dateText, inst) {
console.log(inst);
},
altField: "#" + this.id.replace("_date_", "_date_db_"),
altFormat: 'yy-mm-dd'
});
});