3

我通过简单地将字段 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) 用于存储用户选择的数据库格式日期的日期选择器。

为了处理多个日期选择器的选择,我分配了一个类并使用 livequery 在页面加载后检测 onClicks:

$(".publication_date").livequery(function() {
                $(this).datepicker({
                    dateFormat: "dd M yy",
                    changeYear: true,
                    changeMonth: true,
                    onSelect: function(dateText, inst) {
                        console.log(inst);
                    }
                });
            });

我有一个问题,日期选择器如何知道要填充哪个替代字段?在单个日期选择器上,通常包括:

altField: '#start_date_datepicker_altfield', 
altFormat: 'yy-mm-dd',

人口发生。

4

2 回答 2

5

我知道文档说它需要一个选择器,但它也可以带一个 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 元素,它仍然可以正常工作:)

于 2010-09-07T10:07:42.740 回答
0

我没有使用过 livequery,但从它的外观来看,您可以idthis.id. 在您的示例 HTML 中,这将是“publication_date_2”,从中创建替代字段“publication_date_db_2”的必要 ID 相对容易(您可以通过更改命名字段的策略使其更容易)。

所以也许:

$(".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'
    });
});
于 2010-09-07T10:06:24.527 回答