2013-05-22 3 views
3

Невозможно получить опцию jQueryUI datepicker beforeShowDay для работы.datepicker Error = Uncaught TypeError: Не удается прочитать свойство '0' undefined

Я пробовал разные темы справки, которые я нашел, но я не могу заставить его работать.

Я получаю эту ошибку

Uncaught TypeError: Cannot read property '0' of undefined

Это мой JS. но он не работает

<script type="text/javascript"> 
jQuery(document).ready(function() { 
    var your_dates = [new Date(13, 5, 5), new Date(13, 5, 10)]; 
    jQuery("div#event-calender").datepicker({ 
     beforeShowDay: function (date) { 
      if (jQuery.inArray(date.toString(), your_dates) != -1) { 
       return [true, 'highlight']; 
      } 
     } 
    }); 
}); 
</script> 

ответ

11

Нужно всегда возвращать массив, а не только при условии соответствия.

От documentation:

beforeShowDay

Type: Function(Date date)

A function that takes a date as a parameter and must return an array

jQuery(document).ready(function() { 
    var your_dates = [new Date(13, 5, 5), new Date(13, 5, 10)]; 
    jQuery("div#event-calender").datepicker({ 
     beforeShowDay: function (date) { 
      var arr; 
      if (jQuery.inArray(date.toString(), your_dates) != -1) { 
       arr = [true, 'highlight']; 
      }else { 
       arr = [true, '']; 
      } 
      return arr; 
     } 
    }); 
}); 

FIDDLE

+0

Спасибо, вполне очевидный вопрос, избавили меня некоторое время отладки на самом деле найти, где этот вопрос поскольку ошибка js не показывала мне точную строку файла +1 :) –

3

beforeShowDay
A function that takes a date as a parameter and must return an array with:

  • true/false indicating whether or not this date is selectable a CSS
  • class name to add to the date's cell or "" for the default
  • presentation an optional popup tooltip for this date

The function is called for each day in the datepicker before it is displayed

Измените ваш beforeShowDay на

beforeShowDay: function (date) { 
    if (jQuery.inArray(date.toString(), your_dates) != -1) { 
     return [true, 'highlight']; 
    } else { 
     return [true, '']; 
    } 
} 

Edit
Либо изменение your_dates в

var your_dates = [new Date(2013,5,5).toString(), new Date(2013,5,10).toString()]; 

или использовать что-то вроде этого вместо jQuery.inArray(...)

var found = your_dates.filter(function(d) { 
       return date.getTime() === d.getTime(); 
      }).length > 0; 

return [true, (found ? 'highlight' : '')]; 
+0

Это помогло спасибо. Но я все элементы получаю «не выделенные». Вы знаете, что это за проблема? Должен ли я выбрать другой формат даты? – user2407193

+0

Действительно ли это дата, которую вы ожидаете 'новая дата (13, 5, 5) ==« 05. Июнь 1913 года »? – Andreas

+0

Нет, мой массив выглядит следующим образом теперь var your_dates = [new Date(2013,05,05), new Date(2013,05,10)]; Но до сих пор никто не получает гвоздем класс – user2407193

Смежные вопросы