5


1

jQuery Datepickerクラスを控えめに強化するにはどうすればよいですか?

「+7」のようなjQueryのDatepickerクラスのsetDate()メソッドに特別な文字列を渡すと、「今日から7日」に変換されます。

しかし、その「+7」を取り戻すことはできません。 getDate()を呼び出すと、計算された結果の日付を取得します。

伝播のために特別な文字列「+7」を引き出す必要があるユースケースがあります。 1つのコードチャンクは特別な文字列をDatepickerに渡し、Datepickerを日付を引き出​​す別のコードチャンクに渡しますが、後者は計算された日付ではなく特別な文字列を知る必要がある場合があります。

したがって、Datepickerツールを拡張して(a)特別なコードを内部に保存し、(b)getOriginallyPassedInDate()などのメソッドを介して公開する必要があります。

私はjQuery / Javascriptの忍者ではないので、必要に応じてDatepickerクラスに必要な機能を控えめに追加する方法に関するガイダンスを実際に使用できました。

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


ダックパンチやモンキーパッチは必要ありません。

jQuery UI v1.8rc3を使用する場合、デフォルトの日付を設定するオプションは、ドキュメントに示されている「setDate」ではなく「defaultDate」です。 次のように、 onSelect`または onClose` fnで取得できます。

    $('.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);
        }
    });

'' '' '

Teach-a-man-to-fish部門から、これを学ぶために2つのことを行いました。

  1. datepickerのソースコードを調べました。 それは明らかに defaultDateオプション。これは、オフセットに+/- Nを受け入れるように文書化されています。 `setDate`オプションはありません。

  2. デバッガでページを実行し、 `onClose`内にブレークを入れました 関数。 そこにinstパラメータを入力すると、設定がそこに保存されていることがわかりました。