web-dev-qa-db-ja.com

jQuery UI Datepicker-特定の日を無効にする

特定のあらかじめ決められた日の選択を許可しないようにjQuery UI Datepickerを設定する(簡単な)方法はありますか?

このアプローチ を動作させることはできましたが、nullエラーが発生してIEに表示されません。

'natDays [...]。0'はnullまたはオブジェクトではありません

前もって感謝します!

UPDATE:いくつかのコードを含めた場合、役に立ちますか?とにかく、これのほとんどは前述のスレッドから直接取得されました:

natDays = [
        [7, 23], [7, 24], [8, 13], [8, 14], 
    ];

    function nationalDays(date) {
        for (i = 0; i < natDays.length; i++) {
            if (date.getMonth() == natDays[i][0] - 1
            && date.getDate() == natDays[i][1]) {
                return [false, natDays[i][2] + '_day'];
            }
        }
        return [true, ''];
    }

    function noWeekendsOrHolidays(date) {
        var noWeekend = $.datepicker.noWeekends(date);
        if (noWeekend[0]) {
            return nationalDays(date);
        } else {
            return noWeekend;
        }
    }


    $(function() { 
        $("#datepicker").datepicker({
            inline: true,
            minDate: new Date(2009, 6, 6), 
            maxDate: new Date(2009, 7, 14), 
            numberOfMonths: 2, 
            hideIfNoPrevNext: true,
            beforeShowDay: $.datepicker.noWeekends,
            altField: '#alternate',
        }); 
    });

再度、感謝します!

23
Sam

「var」キーワードを前に付けてnatDaysを適切に宣言してみましたか?

また、natDays定義の最後に追加のカンマがあります。

natDays [i] [2]は、配列に2つの項目しかないため機能しません-ただ試してください ''

さらに、beforeShowDay関数名を正しく設定する必要があります-カスタム関数を呼び出しているようにも見えません

9
Chris Haines

特定の日付が選択されないようにする方法は次のとおりです。

var unavailableDates = ["9-5-2011","14-5-2011","15-5-2011"];

function unavailable(date) {
  dmy = date.getDate() + "-" + (date.getMonth()+1) + "-" + date.getFullYear();
  if ($.inArray(dmy, unavailableDates) < 0) {
    return [true,"","Book Now"];
  } else {
    return [false,"","Booked Out"];
  }
}

$('#iDate').datepicker({ beforeShowDay: unavailable });

ソース:jQuery-Datepicker-特定の日付を無効にする

14
Tokes

beforeShowDayオプションを使用できます。月の28日を過ぎた日は無効にする必要がありました。これが私のコードです。

$('.datepicker').datepicker({
    dateFormat: "yy-mm-dd",
    beforeShowDay: function(date) {
        var day = date.getDate();
        if (day > 28) {
            return [false];
        } else {
            return [true];
        }
    }
});

詳細は次のとおりです。 http://api.jqueryui.com/datepicker/#option-beforeShowDay

BeforeShowDayコールバックに渡される日付変数はJavaScriptの日付オブジェクトなので、さまざまなライブラリを使用してフォーマットしたり、date.getTime()などを使用してタイムスタンプを取得したりできます。

8
Alex K

IEの問題は、おそらく次の行にあります:

altField: '#alternate',
}); 

コンマ記号を削除してみてください、それは動作するはずです。

1
Lukas Celovsky
beforeShowDay: $.datepicker.noWeekends,

になります

beforeShowDay: noWeekendsOrHolidays,
1
allen
 var unavailableDates = ["19-8-2014","14-9-2014"];

 function unavailable(date) {
    dmy = date.getDate() + "-" + (date.getMonth()+1) + "-" +date.getFullYear();
    if ($.inArray(dmy, unavailableDates) < 0) {
     return [true,"","Book Now"];
    } else {
  return [false,"","Booked Out"];
  }
 }

 $('#iDate').datepicker({ beforeShowDay: unavailable });

ライブデモ: http://jsfiddle.net/vfod0krm/

0
Roman