2010-07-27 77 views
1

嗨,jQuery的日期选择器的IE浏览器

我有我的jQuery的日期选择器脚本的一个大问题禁用日期问题。 我使用jQuery 1.4.2和jQuery UI 1.8。

背景: 我有一个预订日历,其中包含fromDate和toDate,所有已保留的日期都被禁用。日期来自AJAX呼叫数据库。

问题: 一切工作正常在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]; 
    } 

,最后我的日期选择器的呼叫:

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

你有任何想法,为什么所有的火狐,Safari,Chrome浏览器工作正常,...但在IE 7/8 ???

谢谢大家。

萨沙

+0

我会使用IE8调试器来逐步通过并确保浏览器按照您期望的方式解析您的日期字符串。 – Pointy 2010-07-27 13:10:43

+0

好主意......我会试试...... – codeworxx 2010-07-27 13:50:02

回答

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 2010-07-27 14:04:21

+0

很高兴帮助!这是一个有趣的玩法,并且你的代码非常适合开始。 – Pointy 2010-07-27 14:17:11

+0

谢谢;)非常感谢=) – codeworxx 2010-07-27 14:20:39