【问题标题】:jQuery Datepicker - Automatically define altField for all datepickersjQuery Datepicker - 自动为所有日期选择器定义 altField
【发布时间】:2025-12-09 02:15:01
【问题描述】:

我所有的日期选择器都有一个自动生成的隐藏字段,它与日期选择器输入具有相同的 ID,但前面带有下划线。

<div class="datepicker">
    <input id="MyField1" type="text" value="" />
    <input id="_MyField1" type="hidden" value="" />
</div>

<div class="datepicker">
    <input id="MyField2" type="text" value="" />
    <input id="_MyField2" type="hidden" value="" />
</div>

然后任何具有 datepicker 类的字段都会被制成日期选择器。

$('.datepicker input').datepicker({
    altFormat: 'yy-mm-dd',
    changeMonth: true,
    constrainInput: true,
    dateFormat: 'dd/mm/y',
    minDate: '+0d',
    numberOfMonths: 2
});

但我怎样才能自动让它为每个设置 altField 选项?

这不起作用。我也尝试在原始选项中进行分配,但这也不起作用。

$('.datepicker input').each(function() {
    var altField = '_' + $(this).prop('id');
    $(this).datepicker('option', 'altField', altField);
});

【问题讨论】:

  • var altField = '_' + $(this).prop('id');:注意 id 是一个属性,而不是一个属性。

标签: jquery jquery-ui datepicker jquery-ui-datepicker


【解决方案1】:

altField 选项采用选择器、jQuery 对象或元素,而不是 id 属性。

尝试指定id selector

$(this).datepicker("option", "altField", "#_" + $(this).prop("id"));

或者,保存对$()的调用和对prop()的调用:

$(this).datepicker("option", "altField", "#_" + this.id);

【讨论】:

  • 谢谢,我不知道我是怎么错过的。
【解决方案2】:

试试这个:

$('.datepicker input').each(function() {
    var altField = '#_' + $(this).prop('id');
    $(this).datepicker('option', 'altField', altField);
});

【讨论】:

    【解决方案3】:

    jQuery UI Datapicker 1.9,使用 altField、altFormat 选项和覆盖内部方法

    克隆字段以数据库格式“yy-mm-dd”存储实际值, 并使用主字段显示格式化值(本示例中的“dd-mm-yy”):

    $(function() {
        var _connectDatepicker = $.datepicker._connectDatepicker;
        $.datepicker._connectDatepicker = function(target, inst) {
            var $target = $(target);
            var $altField = $target.clone(false).appendTo($target.parent()).hide();
            inst.settings.altField = $altField;
            inst.settings.dateFormat = inst.settings.altFormat = "yy-mm-dd";
    
            _connectDatepicker.call(this, target, inst);
            $target.removeAttr("name").datepicker( "option", "dateFormat", "dd-mm-yy");
        };
    });
    

    【讨论】:

    • 在上面的示例中 REPLACE var $altField = $target.clone(false).appendTo($target.parent()).hide(); TO var $altField = $("#_" + $target.prop("id"));
    最近更新 更多