2012-04-16 25 views
0

をテストしている1日の翌日を有効にする:jQueryのUI日付ピッカーbeforeShowDayは、私がbeforeShowDayイベントで戦っている

私は設定していDatePickerのは、いくつかの研究プログラムの日付を起動提案し、それがこのように動作する必要がありますway:

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

は(おそらく最適化されたが、私はすべてが稼働している一度私が何ができるかわかりません)私はこれまでやったことです:

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; 
} 

そして、私は上の「noWeekendsOrHolidays」と呼びますbeforeShowDayイベント。 私は2つの文字列(特定の日付と休日を有効にすることができます)から "m-d-yyyy"という形式で日付を取得します。

このループのどこで(実際に可能なのか)知りたい場合は、現在テスト中の日付の後にdatepickerインスタンスにtrueまたはfalseを返すように指示できますか?

私は休日の月曜日にヒットしたときに次の繰り返し(翌日のカレンダー)にフラグを入れることができますか?テストではこのフラグを考慮して、偽ではなく火曜日にtrueを返します。最初に行動するはずですか?

私は十分にはっきりしていたと思いますか?英語は母国語ではないので、私が使った言葉が正しいものではないことを教えてください。

ありがとうございました!

セドリック

答えて

0

右ここに私の問題を投稿するには、実際に私が戻って立って、解決策を見つけることができました。私は月曜日ではない休日を打ったとき、私は単純に(D-1)の前日テスト

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; 
} 

:ここ

は私の更新されたコードです。

楽しい一日を!

セドリック