Вопрос

Я динамически генерирую датусикер, просто добавив поле 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'
    });
});
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top