jQuery日期选择器对话框在任何版本的Internet Explorer中都不起作用

时间:2015-01-19 16:25:28

标签: javascript jquery internet-explorer jquery-ui-datepicker

jQuery datepicker有一个奇怪的问题。在Chrome,FF中可以正常工作,但在Internet Explorer中它可以像附加图像一样呈现,甚至是IE 11,就像你没有日历一样。

enter image description here

渲染出这样的内容时没有控制台错误,我正在初始化:

$('.customDateInput').each(function (idx) {
     var $this = $(this);
     var defaultDate = $this.attr("value").replace(/-/g, ",");
     var $datepicker = $this.parent().find(".datepicker");
     var $spanElement = $this.parent().find(".datepicker-button span");
     (function (picker, altField, defaultDate, spanElement) {
          picker.datepicker({
               yearRange: "c-75:c+10",
               firstDay: 1,
               dateFormat: 'D, d M yy',
               changeMonth: true,
               changeYear: true,
               altField: altField,
               altFormat: 'yy-mm-dd',
               defaultDate: new Date(defaultDate),
               onClose: function(dateText, inst) {
                   if (dateText) {       
                        spanElement.html('<strong>'+dateText+'</strong>');
                   }
               }
          });
      })($datepicker, $this, defaultDate, $spanElement);
});

$('.datepicker-button').click(function(){
        $(this).parent().find(".datepicker").datepicker('show');
});

只是寻找有关我如何调试此内容的提示!

1 个答案:

答案 0 :(得分:0)

好的我终于想通了,问题在于传递了默认日期,因为IE中有以下警告,其中NaN打破了日历。

鉴于defaultDate将是&#39; 2014,12,18&#39;保存日期或&#39;&#39;没有约会:

  • new Date('') // NaN&lt; - Chrome返回无效日期,不会中断日历
  • new Date('2014,12,18') // NaN&lt; - Chrome返回&#39; 2014年12月18日星期四&#39;
  • new Date(null) // Thu Jan 1 00:00:00 UTC 1970
  • new Date(undefined) // NaN
  • new Date(2014,12,18) // 1月18日星期日(因为JS考虑从0-11开始的几个月)

解决方案是使用新的Date()参数:

  • new Date() //预期的当前日期
  • new Date(2014, 11, 18) // 2014年12月18日如预期

-

$('.customDateInput').each(function (idx) {
    var $this = $(this);
    var defaultDate = $this.attr("value").replace(/-/g, ",");
    var $datepicker = $this.parent().find(".datepicker");
    var $spanElement = $this.parent().find(".datepicker-button span");
    (function (picker, altField, defaultDate, spanElement) {

      /** Solution to issue **/
      if(defaultDate) {
          defaultDate = defaultDate.split(',');
          defaultDate = new Date(defaultDate[0], defaultDate[1] - 1, defaultDate[2]);
      } else {
          defaultDate = null;
      }
      /** End of solution **/

      picker.datepicker({
           yearRange: "c-75:c+10",
           firstDay: 1,
           dateFormat: 'D, d M yy',
           changeMonth: true,
           changeYear: true,
           altField: altField,
           altFormat: 'yy-mm-dd',
           defaultDate: new Date(defaultDate),
           onClose: function(dateText, inst) {
               if (dateText) {       
                    spanElement.html('<strong>'+dateText+'</strong>');
               }
           }
      });
   })($datepicker, $this, defaultDate, $spanElement);
});

$('.datepicker-button').click(function(){
    $(this).parent().find(".datepicker").datepicker('show');
});