一个页面多个地方使用日期组件 - layui.laydate时,多次渲染闪退问题

开发页面中有多个地方需要选择日期,所以选择了layui的 laydate控件,但是在点击第二个“日期选择框”时,生成的选择框只是显示一下就消失了,参考网上的资料,是由于我们点击了“日期选择框”后 ,laydate会给input框增加一个 lay-key=”1”,找到了如下的解决方法:通过类选择“日期选择框”,遍历循环创建实例。

  1.  
    <!DOCTYPE html>
  2.  
    <html lang="en">
  3.  
    <head>
  4.  
    <meta charset="UTF-8">
  5.  
    <title>Title</title>
  6.  
    <script type="text/javascript" src="../public/3rdLibs/jquery/v3.2.1/jquery-3.2.1.min.js"></script>
  7.  
    <script type="text/javascript" src="../public/3rdLibs/laydate/v5.0.9/laydate/laydate.js"></script>
  8.  
    </head>
  9.  
    <body>
  10.  
    <div class="">
  11.  
    上课日期:
  12.  
    <input type="text" class="J-startTime" value="" placeholder="请选择开始日期" readonly="readonly">
  13.  
    <span class="from-to">&nbsp-&nbsp</span>
  14.  
    <input type="text" class="J-endTime" value="" placeholder="请选择结束日期" readonly="readonly">
  15.  
    </div>
  16.  
    <div class="">
  17.  
    考试日期:
  18.  
    <input type="text" class="J-startTime" value="" placeholder="请选择开始日期" readonly="readonly">
  19.  
    <span class="from-to">&nbsp-&nbsp</span>
  20.  
    <input type="text" class="J-endTime" value="" placeholder="请选择结束日期" readonly="readonly">
  21.  
    </div>
  22.  
    <script>
  23.  
    $(function () {
  24.  
    //点击“开始日期”弹出日期选择框,选择日期后,结束日期默认等于开始日期,且结束日期最小值为对应的开始日期
  25.  
    //遍历循环创建实例
  26.  
    var endDate=[];
  27.  
    $('.J-startTime').each(function(index){
  28.  
    var _this=this;
  29.  
    laydate.render({
  30.  
    elem: _this,
  31.  
    trigger:'click',
  32.  
    done: function(value, date){
  33.  
    $(_this).nextAll('.J-endTime').val(value);
  34.  
    endDate[index].config.min ={
  35.  
    year:date.year,
  36.  
    month:date.month-1, //关键
  37.  
    date: date.date,
  38.  
    };
  39.  
    }
  40.  
    });
  41.  
    });
  42.  
    $('.J-endTime').each(function (index) {
  43.  
    var _this=this;
  44.  
    endDate[index]=laydate.render({
  45.  
    elem:_this,
  46.  
    });
  47.  
    });
  48.  
    });
  49.  
    </script>
  50.  
    </body>
  51.  
    </html>

通过数组endDate存储“开始日期”对应的“结束日期”,动态设置“结束日期”的最小值。

注意:

1、endDate[index].config.min是一个对象,必须分别设置:年、月、日;

2、date中的月从1开始,而endDate[index].config.min中的月从0开始,所以需在date.month-1基础上赋值。

 

转自于:https://www.codeleading.com/article/7346746014/

posted @ 2020-08-18 14:58  Ao_min  阅读(987)  评论(0编辑  收藏  举报