jQuery UI时间选择器问题

时间:2012-10-17 17:09:09

标签: jquery jquery-ui

好的,我们正在使用jquery-ui-timepicker-addon-0.9.3.js文件

其中有一个很好的弹出日历并填充输入字段。

问题是,如果输入字段已经填充并且说某人调出日历并且恰好点击下个月并点击日历...则输入字段将在下个月更新,即使" DONE"没有点击按钮。

如果有人熟悉这个JS文件...我会感谢一些帮助,只有在" DONE"选择日期后点击了按钮...

    $(function()
{
    $("#publication_datepicker").datetimepicker(
    {
        dateFormat: 'mm-dd-yy',
        showOn: 'button',
        buttonImage: '..images/calendar.gif',
        buttonImageOnly: true,
        minDate: 0,
        maxDate: '+5Y',
        duration: '',
        <c:if test="${formIsReadonly or form.newsItemId == '-1'}">disabled: true,</c:if>
        constrainInput: false,
        timeFormat: 'hh:mm'
    });

JS文件: jquery-ui-timepicker-addon.js

enter image description here

2 个答案:

答案 0 :(得分:1)

发现问题...在js文件中有一个名为:_newInst

的函数

我在两个部分中注释掉了这一行:

tp_inst._updateDateTime(dp_inst)

解决了问题

 _newInst: function ($input, o) {
        var tp_inst = new Timepicker(),
            inlineSettings = {};
        tp_inst.hour = tp_inst._defaults.hour;
        tp_inst.minute = tp_inst._defaults.minute;
        tp_inst.second = tp_inst._defaults.second;
        tp_inst.ampm = "";
        tp_inst.$input = $input;
        for (var attrName in this._defaults) {
            var attrValue = $input.attr("time:" + attrName);
            if (attrValue) {
                try {
                    inlineSettings[attrName] = eval(attrValue)
                } catch (err) {
                    inlineSettings[attrName] = attrValue
                }
            }
        }
        tp_inst._defaults = $.extend({}, this._defaults, inlineSettings, o, {
            beforeShow: function (input, dp_inst) {
                if ($.isFunction(o.beforeShow)) {
                    o.beforeShow(input, dp_inst, tp_inst)
                }
            },
            onChangeMonthYear: function (year, month, dp_inst) {
                //tp_inst._updateDateTime(dp_inst);
                if ($.isFunction(o.onChangeMonthYear)) {
                    o.onChangeMonthYear(year, month, dp_inst, tp_inst)
                }
            },
            onClose: function (dateText, dp_inst) {
                if (tp_inst.timeDefined === true && $input.val() != "") {
                    //tp_inst._updateDateTime(dp_inst)
                }
                if ($.isFunction(o.onClose)) {
                    o.onClose(dateText, dp_inst, tp_inst)
                }
            },
            timepicker: tp_inst
        });
        if (o.altField) {
            tp_inst.$altInput = $(o.altField).css({
                cursor: "pointer"
            }).focus(function () {
                $input.trigger("focus")
            })
        }
        if (tp_inst._defaults.minDate !== undefined && tp_inst._defaults.minDate instanceof Date) {
            tp_inst._defaults.minDateTime = new Date(tp_inst._defaults.minDate.getTime())
        }
        if (tp_inst._defaults.minDateTime !== undefined && tp_inst._defaults.minDateTime instanceof Date) {
            tp_inst._defaults.minDate = new Date(tp_inst._defaults.minDateTime.getTime())
        }
        if (tp_inst._defaults.maxDate !== undefined && tp_inst._defaults.maxDate instanceof Date) {
            tp_inst._defaults.maxDateTime = new Date(tp_inst._defaults.maxDate.getTime())
        }
        if (tp_inst._defaults.maxDateTime !== undefined && tp_inst._defaults.maxDateTime instanceof Date) {
            tp_inst._defaults.maxDate = new Date(tp_inst._defaults.maxDateTime.getTime())
        }
        return tp_inst
    }

答案 1 :(得分:0)

你可以尝试这个(未经测试):

   $("#publication_datepicker").datetimepicker(
        {
            dateFormat: 'mm-dd-yy',
            showOn: 'button',
            buttonImage: '../chassis/images/calendar.gif',
            buttonImageOnly: true,
            minDate: 0,
            maxDate: '+5Y',
            duration: '',
            <c:if test="${formIsReadonly or form.newsItemId == '-1'}">disabled: true,</c:if>
            constrainInput: false,
            timeFormat: 'hh:mm'
        });

 $.datepicker.unbind('blur');