1

datepicker jQuery オブジェクトから複製 (継承) し、_generatedHTML メソッドをオーバーライドする必要があります。私のコード:

$.fn.datepickerExt = $.fn.datepicker;
var datepickerOldHTML = $.datepicker._generateHTML;

var datepickerExt = $.extend($.datepicker, {
    _generateHTML: function(inst) {
        var generatedHTML = datepickerOldHTML.apply(this, arguments);
        return "<div style='text-align:center'>header</div>"+generatedHTML;
    }
})

しかし、異なるオブジェクト $.fn.datepicker と $.fn.datepickerExt. があるかどうかはわかりません。

JSFiddle のリンク: http://jsfiddle.net/konstantin/9Rjna/

この場合、datepickerExt にのみヘッダーを追加する必要があります...

4

2 に答える 2

2

私は同じ問題に遭遇し、最も提案された解決策を実行した後、解決策を得ました。

$('#actions').append($new_row);
$('#actions').find('input.datepicker').removeClass("hasDatepicker").removeAttr('id');
$('#actions').find('button.ui-datepicker-trigger').remove();
$('#actions').find('input.datepicker').unbind();
$('#actions').find('input.datepicker').datepicker('destroy');
$('#actions').find('input.datepicker').datepicker(
{
   autoSize:false,
   showOn:'button',
   dateFormat:'yy-mm-dd',
   weekHeader: 'W',
   showWeek: true,
   firstDay: 0,
   changeMonth: true,
   changeYear: true,
   gotoCurrent:true,
   showButtonPanel:true,
   showAnim:'',
   duration:'fast'
}
);

複製された要素を挿入した後 (ID「アクション」内):

  1. すべての日付ピッカーID を削除して検出されるようにします。そうしないと、新しく作成された日付ピッカーが特定の入力 ID に固執します。
  2. 日付ピッカーボタンを削除するか、複製された要素で複製されます
  3. 日付ピッカーのバインドを解除します(これについてはよくわかりませんが、必須です)
  4. デートピッカーを破壊する
  5. これですべてがクリーンアップされ、datapickerイベントが再初期化されます
于 2012-12-12T13:54:54.083 に答える
0

まず、 (jQuery コードのプライベート クラス)$.datepickerのインスタンスであるオブジェクトを複製する必要があります。Datepickerそれ以外の場合は、コピーを行うだけで、同じメソッドを記述します。

$.fn.datepicker次に、のインスタンスを内部的に呼び出すため、 のコードをコピーする必要があります$.datepicker

コード:

(function($, window, undefined) {

    $.datepickerExt = jQuery.extend({}, $.datepicker);
    var datepickerOldHTML = $.datepicker._generateHTML;

    $.datepickerExt._generateHTML = function(inst) {
        var generatedHTML = datepickerOldHTML.apply(this, arguments);
        return "<div style='text-align:center'>header</div>" + generatedHTML;
    };

    $.fn.datepickerExt = function(options) {

        /* Verify an empty collection wasn't passed - Fixes #6976 */
        if (!this.length) {
            return this;
        }

        /* Initialise the date picker. */
        if (!$.datepickerExt.initialized) {
            $(document).mousedown($.datepickerExt._checkExternalClick).
            find('body').append($.datepickerExt.dpDiv);
            $.datepickerExt.initialized = true;
        }

        var otherArgs = Array.prototype.slice.call(arguments, 1);
        if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate' || options == 'widget')) return $.datepickerExt['_' + options + 'Datepicker'].apply($.datepickerExt, [this[0]].concat(otherArgs));
        if (options == 'option' && arguments.length == 2 && typeof arguments[1] == 'string') return $.datepickerExt['_' + options + 'Datepicker'].apply($.datepickerExt, [this[0]].concat(otherArgs));
        return this.each(function() {
            typeof options == 'string' ? $.datepickerExt['_' + options + 'Datepicker'].
            apply($.datepickerExt, [this].concat(otherArgs)) : $.datepickerExt._attachDatepicker(this, options);
        });
    };

}());

走る

于 2012-12-12T14:42:35.390 に答える