javascript – 在下面的Datepicker小部件实现中,’beforeShowDay’和’onSelect’函数实际上做了什么?

前端之家收集整理的这篇文章主要介绍了javascript – 在下面的Datepicker小部件实现中,’beforeShowDay’和’onSelect’函数实际上做了什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我刚开始在一个开发人员以前工作的网站上工作.他在其中一个网页中实现了Datepicker小部件.

当我浏览这个实现的代码时,我不明白代码实际上做了什么?我无法弄清楚逻辑的编写方式.

我还浏览了关于函数’beforeShowDay’和’onSelect’的Datepicker小部件的jQuery UI API文档,但是也找不到线索,所以请求帮助让我以更简单和描述的方式理解下面的代码.

有人可以用简单明了的语言让我理解“afterShowDay”和“onSelect”中函数用法吗?

HTML代码

<div class="col-md-2 voffset2 rightpad">
  <div class="col-sm-3">
    <div id="datepicker"></div>
  </div>
</div>

Javascript代码

<script type="application/javascript">
    $(document).ready(function() {

      /******* Display Calender and events highlighted *******/

      /*Not understood what does below array variable has role to play */
      var myDates = $.parseJSON('["1969-12-31","1969-12-31","1969-12-31"]');
      $( "#datepicker" ).datepicker({
        beforeShowDay: function(date) {
          var dateObj = new Date(date);
          var month = dateObj.getMonth() + 1;
          if(month < 10) {
            month = "0"+month;
          }

          var day = dateObj.getDate();          
          if(day < 10) {
            day = "0"+day;
          }

          var year = dateObj.getFullYear();

          thisdate = year + "-" + month + "-" + day;

          if($.inArray(thisdate,myDates) != -1) {
            return [true,'eventDateCls',''];
          } else {
            return [true,'',''];
          }
        },onSelect: function(dateText,inst) {
          var dateAsString = dateText; 

          console.log(dateAsString);

          url = "http://localhost/CKWEB_28-12-2015/ajax_event.PHP";

          $.ajax({
            url: url,type: "POST",data:  {event_date:dateAsString},beforeSend: function() {
              $('#loader-icon').show();
            },complete: function() {
              $('#loader-icon').hide();
            },success: function(data) {
              $("#eventListing").html(data);

              $('#loader-icon').hide();
            },error: function(){}           
          });
        }
      });
        /******* Display Calender and events highlighted *******/
    });        
    </script>

解决方法

beforeShowDay

名为beforeShowDay的函数用于在满足特定条件时向每个datepicker单元格添加特定的CSS类.在您的情况下,此条件是“如果单元格的确切日期等于之前在myDates中定义的事件日期之一”.

让我为你解析代码

第1部分

var myDates = $.parseJSON('["1969-12-31","1969-12-31"]');

这是定义myDates变量并为其分配值的部分.该值显然是一个模型值,因为从1901年1月1日开始的任何jQuery.ui datepicker日期都无法满足1969-12-31.您可以通过四种方法将此值更改为实际事件日期:

>通过执行AJAX调用动态设置它,并在调用$(selector).datepicker(options)函数之前将$.parseJSON(returnedJSON)分配给myDates.
>通过使用任何服务器端脚本(<?PHP echo json_encode($eventDatesArray);?>如果PHP)将JSON字符串嵌入到#datepicker自身的data-anyname属性中,然后使用JavaScript从中读取它来动态设置它通过在调用$(selector).datepicker(options)函数之前将$.parseJSON($(this).data(‘anyname’))分配给myDates来该元素.
>在< script>中动态添加它如果< script>使用服务器端脚本有内联代码,而不是外部文件链接.
>替换现有脚本中的当前日期.

第2部分

var dateObj = new Date(date);
var month = dateObj.getMonth() + 1;
if(month < 10) {
   month = "0"+month;
}

var day = dateObj.getDate();          
if(day < 10) {
   day = "0"+day;
}

var year = dateObj.getFullYear();

thisdate = year + "-" + month + "-" + day;

这是开发人员获取datepicker单元格完整日期的部分,并将其作为具有所需格式的字符串分配给thisdate.仅使用thisdate = $.datepicker.formatDate(“yy-mm-dd”,new Date(date));虽然这本来是一个更容易的方法.

第3部分

if($.inArray(thisdate,myDates) != -1) {
   return [true,''];
} else {
   return [true,''];
}

这是在先前定义的日期内搜索此日期的部分.这里,eventDateCls是用于突出显示事件日期单元格的类名.如果单元格的日期是事件日期之一,则单元格将具有名为eventDateCls的类,并将突出显示.同样,更好的方法可能只使用return [true,(myDates.indexOf(thisdate)< 0)? '':'eventDateCls','']; ONSELECT 至于onSelect,它只是一个事件触发的回调函数,它接收所选日期作为文本并将其发布到某些http://localhost/CKWEB_28-12-2015/ajax_event.PHP,无论它是什么.我们无法确切知道它究竟做了什么,但这是一个PHP文件,可能用于验证和保存(插入到数据库中)所选的日期信息.我们唯一知道的是,它应该返回(echo)一些字符串,它可以通过$(“#eventListing”).html(data)调用直接插入到DOM中.

猜你在找的JavaScript相关文章