0

jQuery UI - Custom widget - Datepicker to Whole Year Calendarで概説されている方法を使用して、通年のカレンダーを表示しています。日付をクリックすると、カレンダーがスクロールして、クリックした日付の月が位置 0 に表示されます。カレンダーが動かないようにするために、次のことを試みましたが、役に立ちませんでした。

  1. onChangeMonthYear ハンドラで showCurrentAtPos を選択した月に更新します。
  2. onSelect ハンドラーで showCurrentAtPos を変更します。
  3. onSelect ハンドラで実際の日付を今年の最初の日付に設定します。

オプション 1 は機能しません。onChangeMonthYear は、日付を選択するときではなく、前と次のリンクをクリックして月を変更するときにのみ呼び出されるためです。

オプション 2 は、カレンダーが再レンダリングされる前に値を設定しているようです。

オプション 3 は、オプション 2 と同じ理由で失敗します。

4

2 に答える 2

0

次のことを試してください。

  1. イベントを介して選択したテキストを取得しますonSelect(既に行っているように)。
  2. beforeShowイベントを使用して、日付を年の初めに設定します。

このように、日付ピッカーをクリックするたびに表示され、1 月 1 日から開始されます。欠点: 日付ピッカーをクリックすると、以前に選択した値が上書きされます。

以下のコードのようなもの:

$( "#datepicker" ).datepicker({
        numberOfMonths: 12,
        defaultDate: "01/01/12",
        onSelect: function(dateText,inst) {
            console.log("This is currently selected date: " + dateText);

        },
        beforeShow: function(input, inst) { 
            $( "#datepicker" ).datepicker( "setDate" , "01/01/12" );
         }


    });
于 2012-08-30T20:38:06.773 に答える
0

これまでのところ、私が見つけた唯一の解決策は、onSelect ハンドラーの最後で次のコードを実行することです。

var parts = dateText.split('-');
setTimeout(function() {
    // This timeout keeps the calendar from moving around and shifting
    // the first month from january to the currently selecte month.
    // For some reason it keeps the red date as the intended one.
        $weeklycalendar.datepicker('setDate', parts[0]+'-01-01');
}, 0);

競合状態とタイミングに依存するため、これは明らかに脆弱なソリューションです。タイムアウト関数の起動が速すぎると機能しなくなり、起動が遅すぎると視覚的なジャンプが発生します。

于 2012-08-30T20:09:55.267 に答える