2012-10-17 32 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

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