我通过简单地将字段HTML附加到div:
来动态生成datepicker<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="">
由于我们存储日期的方式,我们为datepicker设置了一个单独的字段(altfield),用于存储用户选择的数据库格式化日期。
要处理多个日期选择器的选择,我会分配一个类并使用livequery,以便在页面加载后检测onClicks:
$(".publication_date").livequery(function() {
$(this).datepicker({
dateFormat: "dd M yy",
changeYear: true,
changeMonth: true,
onSelect: function(dateText, inst) {
console.log(inst);
}
});
});
我有一个问题,那就是datepicker如何知道填充哪个altfield?在单个日期选择器上,通常包括:
altField: '#start_date_datepicker_altfield',
altFormat: 'yy-mm-dd',
让人口出现。
答案 0 :(得分: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元素,它仍然可以正常工作:)
答案 1 :(得分:0)
我没有使用过livequery,但从它的外观来看,你可以从id
获得匹配元素的this.id
。在您的示例HTML中,这将是“publication_date_2”,从中可以相对轻松地为altfield“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'
});
});