2010-07-27 1 views
1

Эй, ребята,JQuery Datepicker отключить Даты проблемы в IE

У меня есть большая проблема с моей JQuery Datepicker Script. Я использую jQuery 1.4.2 и jQuery Ui 1.8.

Справочная информация: У меня есть календарь бронирования с fromDate и toDate, и все даты, которые уже зарезервированы, отключены. Даты поступают из базы данных по AJAX Call.

Задача: Все работает отлично в Firefox - но IE 7/8 не отключает Даты execept за текущий месяц. Я не получаю сообщение об ошибке в IE 7/8!

Вот мой код:

Сначала AJAX вызова, чтобы получить Даты:

var navDays = (function() { 
     var val = null; 
     $.ajax({ 
      'async': false, 
      'global': false, 
      'url': WEG_URL+'rsv_avdates.php', 
      'success': function (data) { 
       val = data;      
      } 
     }); 
     return val; 
    })(); 

    var disDays = navDays.split('|'); 

В disDays я теперь дат, состоящей из '2010-01-01', '2010-01- 02' , .....

Вот моя disableDates функция:

function disabledDays(date) { 
     var m = date.getMonth(); 
     var d = date.getDate(); 
     var y = date.getFullYear(); 

     for (var i = 0; i <= disDays.length-1; i++) { 
      var myDate = new Date(disDays[i]);    
      if ((m == (myDate.getMonth())) && (d == (myDate.getDate())) && (y == (myDate.getFullYear()))) 
      { 
      return [false]; 
      } 
     } 
     return [true]; 
    } 

и, наконец, мой DatePicker вызов:

$('#fromdate, #todate').datepicker(
    { 
     showOn: "both", 
     buttonImage: 'images/calender.gif', 
     buttonImageOnly: true, 
     beforeShowDay: disabledDays, 
     dateFormat: "dd.mm.y", 
     firstDay: 1, 
     changeFirstDay: false 
    }); 

Есть ли у вас какие-либо идеи, почему все работает отлично в Firefox, Safari, Chrome, ... но НЕ в IE 7/8 ???

Спасибо за все.

Sascha

+0

Я бы использовал отладчик IE8 для перехода и убедился, что браузер анализирует строки даты так, как вы ожидаете. – Pointy

+0

хорошая идея ... я постараюсь ... – codeworxx

ответ

1

Проблема заключается в том, что эти даты строки не очень подходит только инстанцировании объект даты. Вот как вы могли бы сделать «disDays» представляет собой массив дат, который позволит вам использовать только те, кто непосредственно в функции обратного вызова без необходимости строить новые Дата экземпляры все время:

var disDays = $.map(navDays.split('|'), function(d) { 
    var dd = d.split('-'); 
    return new Date(parseInt(dd[0], 10), parseInt(dd[1], 10) - 1, parseInt(dd[2], 10)); 
    }); 

Теперь код обратного вызова может просто сделайте это:

 function disabledDays(date) { 
     var m = date.getMonth(); 
     var d = date.getDate(); 
     var y = date.getFullYear(); 

     for (var i = 0; i <= disDays.length-1; i++) { 
     var myDate = disDays[i];    
     if ((m == (myDate.getMonth())) && (d == (myDate.getDate())) && (y == (myDate.getFullYear()))) 
     { 
      return [false]; 
     } 
     } 
     return [true]; 
    } 
+0

проклятый ... спасибо ... я вам большое спасибо ... я часто просматривал код и не видел. – codeworxx

+0

Рад помочь! Было интересно играть, и ваш код был очень хорош, чтобы начать с него. – Pointy

+0

спасибо;) Большое спасибо =) – codeworxx