2012-04-16 46 views
0

的一個,我與beforeShowDay事件的戰鬥後的一天:jQuery UI的日期選擇器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; 
} 

我稱之爲「noWeekendsOrHolidays」上beforeShowDay事件。 我以這種格式「m-d-yyyy」從2個字符串中獲取我的日期(特定啓用日期和假期到desa​​ble)。

我需要你的幫助來找出在這個循環中的位置(以及如何實際上是可能的)我可以告訴datepicker實例在當前正在測試的一次之後返回真或假的日期?

星期一假期有可能在下一次迭代(日曆上的第二天)上放置一個標誌,測試可以考慮這個標誌在星期二返回true而不是假,因爲它是應該首先表現出來?

那麼,我希望我足夠清楚了嗎?英語不是我的母語,所以讓我知道我使用的某些術語是不是正確的。

非常感謝您的幫助!

塞德里克

回答

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)時,我打一個節日,是不是一個星期一。

祝您有美好的一天!

Cédric