В вашем массиве dates
в JavaScript будет запаздывающая запятая, и это, вероятно, заставляет IE добавлять в ваш массив беспризорный null
:
$dates .= "new Date(".$record[year].", ".$record[mon]."-1, ".$record[day]."),";
# ----------------------------^
Итак, ваш JavaScript выглядит так:
var dates = [ new Date(...), new Date(...), ..., ];
и IE думает, что вы имеете в виду это:
var dates = [ new Date(...), new Date(...), ..., null ];
А затем, в вашем for
цикле внутри highlightDays
, вы попытаетесь вызвать getTime()
на null
:
for (var i = 0; i < dates.length; i++) {
if (dates[i].getTime() == date.getTime()) { // <---------- Right here
return [true, 'highlight'];
}
}
Это даст вам ошибку во время выполнения вашего JavaScript, и тогда весь ваш JavaScript перестанет работать.
Исправьте ваш var dates
, чтобы он не включал запятую.
Раз уж это не так, похоже, у вас проблема со стеком в IE. Отдельные ячейки в календаре будут выглядеть примерно так:
<td class=" " onclick="DP_jQuery_1323234722897.datepicker._selectDay('#datepicker',11,2011, this);return false;">
<a class="ui-state-default" href="#">1</a>
</td>
Ваша проблема связана с return false
в атрибуте onclick
. Если вы очистите эти атрибуты после привязки указателя даты:
$('#datepicker td').attr('onclick', '');
тогда #datepicker
должен ответить на ваш клик. Возможно, вы захотите переместить ваш evt.preventDefault();
с обратного вызова $.get
на обработчик click
.
Демо: http://jsfiddle.net/ambiguous/XanvW/4/
И если вы хотите, чтобы ваш обработчик щелчков вызывался после выбора даты (а не «вместо выбора даты», как я думал), вам нужен onSelect
обратный вызов :
Позволяет вам определить собственное событие, когда выбран указатель даты.