2012-10-17 33 views
0

好吧,我们使用的是jquery-ui-timepicker-addon-0.9.3.js文件jQuery UI的时间选择问题

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

问题是,如果输入字段已经填充并且说有人调出日历并恰好点击下个月并点击远离日历...输入字段将在下个月更新,即使“完成”按钮没有被点击。

如果任何人都熟悉这个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

回答

1

发现问题...在js文件中有一个叫功能:_newInst

我在第2节注释掉这一行:

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

嗨,谢谢你 - 真的为我节省了很多时间来研究这个问题。看起来很奇怪,它是用这种方式编码的,而且它在1.4.1版本中似乎仍然是一样的。我原以为它能像标准的日期选择器一样工作是有意义的。 – Stuart

+0

高兴地帮助!! .... –

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'); 
+0

立即试用....... –

+0

没有看起来没有工作... –

+0

更新了我的答案,但仍然不知道这是否工作! –