2011-02-25 122 views
3

我努力工作 - 我得到一個'Uncaught TypeError:無法讀取屬性'0'未定義的錯誤與下面,我不明白爲什麼!jquery UI datepicker - 禁用日期範圍

我想在假日小屋的網站上使用jQuery UI datepicker來指示可用性和季節(低,高等)。我有一個作爲datePicker事件的函數來檢查是否有日期預訂,如果沒有,我然後出去檢查我們在哪個季節(非旺季預訂可以在星期一或星期五進行預訂。在旺季,它只是星期五。)

我使用cms生成一些日期數組(通過循環),然後我可以在構建日曆時迭代,所以javascript有點冗長。

該陣列是這樣的:

<script> 
//Peak Season 1 2011 
var ps1 = new Date('June 17, 2011'); 
var pe1 = new Date('September 2, 2011'); 
//Peak Season 2 2011 
var ps2 = new Date('December 19, 2011'); 
var pe2 = new Date('January 6, 2012'); 
// season start and end date arrays 
var peakStart = new Array(ps1,ps2); 
var peakEnd = new Array(pe1,pe2); 

// Bookings 
//Mr &amp; Mrs Smith 
var cbs1 = new Date('May 27, 2011'); 
var cbe1 = new Date('June 5, 2011'); 
//Mr &amp; Mrs Jones 
var cbs2 = new Date('September 1, 2011'); 
var cbe2 = new Date('September 18, 2011'); 
var cottageStart = new Array(cbs1,cbs2); 
var cottageEnd = new Array(cbe1,cbe2); 

// last date of season - don't book past here 
var lastDate = '01/06/2012'; 
</script> 

我有以下的功能,我從beforeShowDate事件調用所要檢查的預訂陣列日曆日期:

$('#cottageCal').datepicker({ 
    minDate: '0d', 
    maxDate: lastDate, 
    beforeShowDay: function(date) { 
     $.each(cottageStart, function(key, value) { 
      //alert (((date >= value) && (date <= value)) ? 'booked' : 'notbooked'); 
      if ((date >= value) && (date <= value)) { 
       return [false, 'booked']; 
      } else { 
       return checkPeak(date); 
      } 
     }); 
    } 
}); 

最後,checkPeak從這裏調用的函數看起來像這樣:

var checkPeak = function(date) { 
    var day = date.getDay(); 
    var month = date.getMonth(); 
    $.each(peakStart, function(key, value) { 
     if ((date > value) && (date < value)) { 
     /* december peak bookings on monday*/ 
      if (month != 11) { 
       return [(day == 5), '']; 
      } else { 
       return [(day == 1), '']; 
      } 
     } 
     if (month == 0) { 
      return false; 
     } else { 
      // it's not during a peak period 
      return [(day == 1 || day == 5), '']; 
     } 
    }); 
} 

我必須b e在這裏做一些根本性的錯誤,但我看不到什麼!

+0

究竟哪裏出錯?你使用'console.log'一步一步地調試代碼 – diEcho 2011-02-25 11:11:15

+0

我在beforeShowDay事件後得到了'Uncaught SyntaxError:意外的標識符' – BellamyStudio 2011-02-25 13:21:50

回答

0

@Penzizzle

你需要什麼minimumDate? 0d無效在minDate:

要麼設置minDate:'-1d'

看到reference

+0

今天是最低日期 - 這就是爲什麼我認爲0d會工作! – BellamyStudio 2011-02-25 12:22:11

+0

0d似乎工作正常 - 我已經評論了我的其他東西,留下了minDate聲明,日曆顯示正常。 – BellamyStudio 2011-02-25 12:24:33

10

相當一個老問題,但我經歷了同樣的問題了,降落在這裏尋找一個解決方案,然後由我自己解決更加關注到documentation

beforeShowDay - function(date) The function takes a date as a parameter and must return an array with [0] equal to true/false indicating whether or not this date is selectable, 1 equal to a CSS class name(s) or '' for the default presentation, and [2] an optional popup tooltip for this date. It is called for each day in the datepicker before it is displayed.

所以,僅僅爲了保險起見,我會明確地改寫原單問題的代碼像這樣:

$('#cottageCal').datepicker({ 
    minDate: '0d', 
    maxDate: lastDate, 
    beforeShowDay: function(date) { 
     $.each(cottageStart, function(key, value) { 
      if ((date >= value) && (date <= value)) { 
       return new Array(false, 'booked'); 
      } else { 
       return checkPeak(date); 
      } 
     }); 
    } 
}); 

這:

var checkPeak = function(date) { 
    var day = date.getDay(); 
    var month = date.getMonth(); 
    var returnArr = new Array(); 
    $.each(peakStart, function(key, value) { 
     if ((date > value) && (date < value)) { 
     /* december peak bookings on monday*/ 
      if (month != 11) { 
       returnArr[0] = (day == 5); 
       returnArr[1] = ''; 
       return returnArr; 
      } else { 
       returnArr[0] = (day == 1); 
       returnArr[1] = ''; 
       return returnArr; 
      } 
     } 
     if (month == 0) { 
      returnArr[0] = false; 
      return returnArr; 
     } else { 
      // it's not during a peak period 
      returnArr[0] = (day == 1 || day == 5); 
      returnArr[1] = ''; 
      return returnArr; 
     } 
    }); 
} 

它的工作對我很好!

+1

爲什麼沒有選擇答案?這是一個很棒的解決方案。 – emc 2012-01-19 11:59:55

+0

男人,你真的救了我的一天,謝謝! – 2013-02-23 02:28:45