0

私はbeforeShowDayイベントと戦っています:

私が設定している日付ピッカーは、いくつかの研究プログラムの開始日を提案しており、このように動作する必要があります:

  • 一部のコースでは、開始日は事前定義された日付であり、この部分は正常に機能しています。
  • 他のいくつかのプログラムでは、月曜日だけが利用可能である必要があります(これは行われます)が、月曜日が休日の場合は無効にします。(これも私にとってはうまく機能しています)。私が見逃している唯一のことは、今週の月曜日だけでなく、次の火曜日も有効にしたいということです(月曜日だけを選択可能にしたかったので、最初は無効にするはずでした)。

これが私がこれまでに行ったことです(おそらく最適化されていませんが、すべてが稼働し始めたら何ができるかを見ていきます):

function availableDays(date) {
    var holidays = $("#holidays").text(); // "1-1-2012,2-20-2012,4-6-2012,4-9-2012,5-21-2012,7-2-2012,8-6-2012,9-3-2012-10-8-2012,11-11-2012,12-25-2012,12-26-2012"
    var holidaysDates = new Array();
    holidaysDates = holidays.split(",");

    var m = date.getMonth(), d = date.getDate(), y = date.getFullYear();

    var selectedCourseStartingDates = $("#courseName option:selected").attr("startingdates");
    if(selectedCourseStartingDates != "") {
        var courseStartingDates = new Array();
        courseStartingDates = selectedCourseStartingDates.split(",");

        for(i = 0; i < courseStartingDates.length; i++) {
            if($.inArray((m+1) + '-' + d + '-' + y,courseStartingDates) != -1 || new Date() > date) {
                if($.inArray((m+1) + '-' + d + '-' + y,holidaysDates) != -1) {
                    return [false];
                }
                else {
                    return [true];
                }
            }
            else {
                return [false];
            }
        }
    }
    else {
        // If not Monday
        if(date.getDay() != 1) {
            return [false];
        }
        else {
            if($.inArray((m+1) + '-' + d + '-' + y,holidaysDates) != -1) {
                return [false];
            }
            else {
                return [true];
            }
        }
    }
}

function noWeekendsOrHolidays(date) {
    var noWeekend = $.datepicker.noWeekends(date);
    return noWeekend[0] ? availableDays(date) : noWeekend;
}

そして、beforeShowDayイベントで「noWeekendsOrHolidays」と呼びます。この形式「md-yyyy」の2つの文字列(特定の有効な曜日と休日からdesable)から日付を取得します。

このループのどこにあるか(そしてそれが実際に可能かどうか)を知るためにあなたの助けが必要です。現在テストされている日付の後の日付に対してtrueまたはfalseを返すようにdatepickerインスタンスに指示できますか?

月曜日の休日にフラグを立てて、次の反復(カレンダーの翌日)にフラグを付けることは可能ですか?テストでは、このフラグを考慮して、火曜日にfalseではなくtrueを返すことができます。そもそも?

さて、私は十分に明確だったと思いますか?英語は私の母国語ではないので、私が使用した用語が正しくない場合はお知らせください。

これについてあなたの助けをどうもありがとう!

セドリック

4

1 に答える 1

0

ここに問題を投稿することで、実際に立ち止まって解決策を見つけることができました。

ここに私の更新されたコードがあります:

function availableDays(date) {
    var holidays = $("#holidays").text(); // "1-1-2012,2-20-2012,4-6-2012,4-9-2012,5-21-2012,7-2-2012,8-6-2012,9-3-2012-10-8-2012,11-11-2012,12-25-2012,12-26-2012"
    var holidaysDates = new Array();
    holidaysDates = holidays.split(",");

    var m = date.getMonth(), d = date.getDate(), y = date.getFullYear();

    var selectedCourseStartingDates = $("#courseName option:selected").attr("startingdates");
    if(selectedCourseStartingDates != "") {
        var courseStartingDates = new Array();
        courseStartingDates = selectedCourseStartingDates.split(",");

        for(i = 0; i < courseStartingDates.length; i++) {
            if($.inArray((m+1) + '-' + d + '-' + y,courseStartingDates) != -1 || new Date() > date) {
                if($.inArray((m+1) + '-' + d + '-' + y,holidaysDates) != -1) {
                    return [false];
                }
                else {
                    return [true];
                }
            }
            else {
                return [false];
            }
        }
    }
    else {
        // If not Monday
        if(date.getDay() != 1) {
            /* UPDATED */
            if($.inArray((m+1) + '-' + (d-1) + '-' + y,holidaysDates) != -1) {
                return [true];
            }
            else {
                return [false];
            }
            /**********/
        }
        else {
            if($.inArray((m+1) + '-' + d + '-' + y,holidaysDates) != -1) {
                return [false];
            }
            else {
                return [true];
            }
        }
    }
}

function noWeekendsOrHolidays(date) {
    var noWeekend = $.datepicker.noWeekends(date);
    return noWeekend[0] ? availableDays(date) : noWeekend;
}

月曜日ではない休日に当たる前日 (d-1) をテストするだけです。

良い1日を !

セドリック

于 2012-04-17T12:56:54.800 に答える