layui时间控件选择时间范围的实现方法


Posted in Javascript onSeptember 28, 2019

解决layui时间控件清空之后无法正常使用的问题,以及时间范围的选择

共有两种解决方式:

方式一(layui 1.x):

html代码:

<div class="layui-inline">
  <div class="layui-input-inline">
      <input type="text" name="start_time" class="layui-input" id="start_time" 
         placeholder="开始时间(修改时间)">
   </div>
 </div>
 <div class="layui-inline">
   <div class="layui-input-inline">
     <input type="text" name="end_time" class="layui-input" id="end_time" 
         placeholder="结束时间(修改时间)">
   </div>
 </div>

js代码:

var start = {
   istime: true,
   format: 'YYYY-MM-DD hh:mm:ss',
   max: '2099-06-16 23:59:59',
   istoday: true,
   choose: function (datas) {
     end.min = datas; //开始日选好后,重置结束日的最小日期
   }
 };
 
 var end = {
   istime: true,
   format: 'YYYY-MM-DD hh:mm:ss',
   max: '2099-06-16 23:59:59',
   istoday: true,
   choose: function (datas) {
     start.max = datas; //结束日选好后,重置开始日的最大日期
   }
 };
 
 document.getElementById('start_time').onclick = function () {
   start.elem = this;
   laydate(start);
 };
 document.getElementById('end_time').onclick = function () {
   end.elem = this;
   laydate(end);
 };

方式二(layui 2.x):

html代码

<div class="layui-inline">
    <div class="layui-input-inline">
       <input type="text" name="start_time" class="layui-input" id="start_time" 
           placeholder="开始时间(修改时间)">
    </div>
  </div>
  <div class="layui-inline">
    <div class="layui-input-inline">
      <input type="text" name="end_time" class="layui-input" id="end_time" 
          placeholder="结束时间(修改时间)">
    </div>
  </div>

js代码

layui.use([ 'laydate'], function(){
  var $ = layui.$;
  var laydate = layui.laydate;
  var nowTime = new Date().valueOf();
  var max = null;
 
    var start = laydate.render({
    elem: '#start_time',
    type: 'datetime',
    max: nowTime,
    btns: ['clear', 'confirm'],
    done: function(value, date){
      endMax = end.config.max;
      end.config.min = date;
      end.config.min.month = date.month -1;
    }
  });
  var end = laydate.render({
    elem: '#end_time',
    type: 'datetime',
    max: nowTime,
    done: function(value, date){
      if($.trim(value) == ''){
        var curDate = new Date();
        date = {'date': curDate.getDate(), 'month': curDate.getMonth()+1, 'year': curDate.getFullYear()};
      }
      start.config.max = date;
      start.config.max.month = date.month -1;
    }
});

根据开始时间 动态限制结束时间 知识点

type: 'datetime', 是带时分秒的 date 是不带时分秒的

layui.use('laydate', function(){
  /* lay('.layui-input').each(function(){
  laydate.render({
   elem: this
   ,trigger: 'click'
   ,change: function(value, date, endDate){
    console.log(value); //得到日期生成的值,如:2017-08-18
    console.log(date); //得到日期时间对象:{year: 2017, month: 8, date: 18, hours: 0, minutes: 0, seconds: 0}
    console.log(endDate); //得结束的日期时间对象,开启范围选择(range: true)才会返回。对象成员同上。
   }
  });
 }); */
 var $ = layui.$;
   var laydate = layui.laydate;
  var nowTime = new Date().valueOf();
   var max = null;
    var start = laydate.render({
     elem: '#start_time',
     type: 'datetime',
     btns: ['clear', 'confirm'],
     done: function(value, date){
       endMax = end.config.max;
       end.config.min = date;
       end.config.min.month = date.month -1;
     },
     change: function(value, date, endDate){
     var timestamp2 = Date.parse(new Date(value));
  timestamp2 = timestamp2 / 1000;
       end.config.min = timestamp2;
       end.config.min.month = date.month -1;
   }
   });
   var end = laydate.render({
     elem: '#end_time',
     type: 'date',
     done: function(value, date){
     console.log(" ====== "+date);
       if($.trim(value) == ''){
         var curDate = new Date();
         date = {'date': curDate.getDate(), 'month': curDate.getMonth()+1, 'year': curDate.getFullYear()};
       }
       start.config.max = date;
       start.config.max.month = date.month -1;
     }
   });
 });

通过以上代码,就已经可以实现动态改变开始时间最大值与结束时间最小值的改变了。

下面来说一下容易遇到的坑:

坑一 :laydate.render无法重复渲染,当laydate.render对应一个elem已经渲染过一次之后,我们是无法通过再次渲染来修改其中的max值与min值的。

坑二 :startDate.config.max与endDate.config.min是一个对象,不是一个字符串,在网上看到一个人不负责任的给了这么一句话,endDate.config.min="2017-01-01";说可以设置,我居然信了他的邪掉进坑里半天。实际这里得到的是一个对象,不同于在我们渲染时的min与max了,直接将字符串赋值必然没有效果。

坑三:dates的格式虽然与endDate.config.min格式相同但是直接让endDate.config.min=dates你会发现并不是你想要的结果,是因为虽然dates中的数据是你选择的日期,可是endDate.config.min中设置的month的值却比你输入的month的值大了一个月,因此假如你选的开始日期是11月13日,直接赋值给了endDate.config.min之后你会发现结束日期的最小日期变成了12月13日,因此我们需要将dates中的月份值减一后再赋值给endDate.config.min

以上这篇layui时间控件选择时间范围的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
动态改变textbox的宽高的js
Oct 26 Javascript
javascript XMLHttpRequest对象全面剖析
Apr 24 Javascript
JS操作select下拉框动态变动(创建/删除/获取)
Jun 02 Javascript
js判断所有表单项不为空则提交表单的实现方法
Sep 09 Javascript
js表单登陆验证示例
Oct 19 Javascript
Bootstrap输入框组件简单实现代码
Mar 06 Javascript
JQuery 进入页面默认给已赋值的复选框打钩
Mar 23 jQuery
BetterScroll 在移动端滚动场景的应用
Sep 18 Javascript
微信小程序自定义select下拉选项框组件的实现代码
Aug 28 Javascript
vue2.0+vue-router构建一个简单的列表页的示例代码
Feb 13 Javascript
js实现移动端吸顶效果
Jan 08 Javascript
微信小程序实现列表滚动头部吸顶的示例代码
Jul 12 Javascript
layui table 表格上添加日期控件的两种方法
Sep 28 #Javascript
Layui选项卡制作历史浏览记录的方法
Sep 28 #Javascript
Layui带搜索的下拉框的使用以及动态数据绑定方法
Sep 28 #Javascript
layui的select联动实现代码
Sep 28 #Javascript
关于layui的下拉搜索框异步加载数据的解决方法
Sep 28 #Javascript
layui的数据表格+springmvc实现搜索功能的例子
Sep 28 #Javascript
layui下拉列表select实现可输入查找的方法
Sep 28 #Javascript
You might like
PHP页面间传递参数实例代码
2008/06/05 PHP
php实现网站留言板功能
2015/11/04 PHP
PHP实现的微信公众号扫码模拟登录功能示例
2019/05/30 PHP
最好用的省市二级联动 原生js实现你值得拥有
2013/09/22 Javascript
在Iframe中获取父窗口中表单的值(示例代码)
2013/11/22 Javascript
jquery删除指定子元素代码实例
2015/01/13 Javascript
jQuery中Ajax的load方法详解
2015/01/14 Javascript
JS实现点击按钮获取页面高度的方法
2015/11/02 Javascript
基于HTML+CSS+JS实现增加删除修改tab导航特效代码
2016/08/05 Javascript
AngularJS 单元测试(一)详解
2016/09/21 Javascript
删除table表格行的实例讲解
2017/09/21 Javascript
微信小程序使用input组件实现密码框功能【附源码下载】
2017/12/11 Javascript
vue 实现类似淘宝星级评分的示例
2018/03/01 Javascript
使用layer弹窗和layui表单实现新增功能
2018/08/09 Javascript
vue.js购物车添加商品组件的方法
2019/09/17 Javascript
[00:52]DOTA2国际邀请赛
2020/02/21 DOTA
Python装饰器decorator用法实例
2014/11/10 Python
Python使用xlrd读取Excel格式文件的方法
2015/03/10 Python
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
2016/09/18 Python
基于Django filter中用contains和icontains的区别(详解)
2017/12/12 Python
pandas 实现将重复表格去重,并重新转换为表格的方法
2018/04/18 Python
Python turtle绘画象棋棋盘
2019/08/21 Python
基于python实现从尾到头打印链表
2019/11/02 Python
Python 从attribute到property详解
2020/03/05 Python
Keras中的多分类损失函数用法categorical_crossentropy
2020/06/11 Python
Python 数据的累加与统计的示例代码
2020/08/03 Python
使用C#编写创建一个线程的代码
2013/01/22 面试题
创业计划书六个要素
2013/12/26 职场文书
二年级语文教学反思
2014/02/02 职场文书
企业法人授权委托书范本
2014/09/23 职场文书
镇班子对照检查材料思想汇报
2014/09/24 职场文书
镇党委书记群众路线整改措施思想汇报
2014/10/13 职场文书
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
2021/05/21 Python
MySQL query_cache_type 参数与使用详解
2021/07/01 MySQL
Python实现对齐打印 format函数的用法
2022/04/28 Python
MySQL数据库实验之 触发器和存储过程
2022/06/21 MySQL