你如何在不影响使用的情况下增强jQuery日期选择器类?

5
您可以将特殊字符串传递给jQuery的Datepicker类的setDate()方法,例如"+7",它将被翻译为"从今天起7天":

http://docs.jquery.com/UI/Datepicker#method-setDate

但是你无法再次获得那个“+7”。当您调用getDate()时,将获得计算出的结果日期。
我有一个用例,需要提取特殊字符串“+7”以进行传播。一段代码将特殊字符串传递到Datepicker中,并将Datepicker传递给另一段代码,后者有时需要知道特殊字符串而不是计算出的日期。
因此,我需要增强Datepicker工具,以便(a)在内部存储特殊代码,并通过像getOriginallyPassedInDate()这样的方法公开它。
我不是jQuery / Javascript专家,所以我确实需要一些指导,了解如何最好地非侵入性地向Datepicker类添加必要的功能,就像您可能会在Ruby中猴子补丁对象一样。
3个回答

2

这个方法可行,基于 @petersendidit 的建议:

// http://paulirish.com/2010/duck-punching-with-jquery/
(function($){
  var _raw = null;
  var _old = $.fn.datepicker;
  $.fn.datepicker = function(arg1, arg2){
    if('getRawDate'==arg1){
      return _raw;
    } else {
      if('setDate'==arg1){
        _raw = arg2;
      }
      return _old.apply(this, arguments);
    }
  };
})(jQuery);


1

你不需要使用Duck Punch或Monkey Patch。

如果我使用jQuery UI v1.8rc3,则设置默认日期的选项是defaultDate,而不是文档中所示的setDate。可以在onSelectonClose函数中检索它,如下所示:

    $('.pick-date').datepicker({
        showWeek: true,
        weekHeader: 'W#',
        defaultDate: "+9",
        onSelect: function(dateText, inst) {
            alert("Select: inst.defaultDate = " + inst.settings.defaultDate);
        },
        onClose: function(dateText, inst) {
            alert("Close: inst.defaultDate = " + inst.settings.defaultDate);
        }
    });

来自教人钓鱼部门,我做了2件事学习这个:

  1. 我查看了datepicker的源代码。它清晰地显示了一个defaultDate选项,该选项记录了一个±N的偏移量。它没有一个setDate选项。

  2. 我在调试器中运行了页面,并在onClose函数内添加了一个断点。在那里,我可以探寻inst参数,并看到设置被存储在那里。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接