jQuery Datepicker禁用IE上的日期问题

时间:2010-07-27 12:24:31

标签: jquery jquery-ui datepicker

嘿伙计,

我的jQuery Datepicker脚本存在很大问题。 我使用jQuery 1.4.2和jQuery Ui 1.8。

背景: 我有一个带有fromDate和toDate的预约日历,所有已保留的日期都被禁用。日期来自AJAX Call的数据库。

问题: 在Firefox中一切正常 - 但IE 7/8不会禁用实际月份的日期。我在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中 NOT ???

谢谢大家。

的Sascha

1 个答案:

答案 0 :(得分:1)

问题是那些日期字符串不适合实例化日期对象。以下是如何使“disDays”成为日期数组,这样您就可以直接在回调函数中使用它们而无需一直构造新的Date实例:

  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];
    }