详解easyui基于 layui.laydate日期扩展组件


Posted in Javascript onJuly 18, 2018

本人后端开发码农一个,公司前端忙的一逼,项目使用的是easyui组件,其自带的datebox组件使用起来非常不爽,主要表现在

1、自定义显示格式很麻烦

2、选择年份和月份用户体验也不好

网上有关于和 My97DatePicker 结合的例子,但感觉也用的不是很爽。

发现国内的layDate体验非常满意,所以萌生出想把这两个组件组合起来的想法,具体代码如下,本人非前端,所以只是实现了基本功能,大神勿喷哦。

easyUI版本:V1.5.2

layDate版本:V5.0

/*
基于laydate日期扩展组件
*/
(function ($) {
  function createBox(target) {
    var state = $.data(target, 'laydate');
    var opts = state.options;
    $(target).addClass('datebox-f').textbox($.extend({}, opts, {
      editable: false,
      icons: [{ iconCls: 'combo-arrow' }]
    }));
    $(target).next("span.textbox").addClass('datebox');
    laydate.render({
      elem: '#' + $(target).next("span.textbox").children(":text").attr("id"), //指定元素,
      format: opts.format,
      type: opts.datetype,
      min: opts.min,
      max: opts.max,
      zIndex :opts.zIndex ,
      range :opts.range ,
      theme: opts.theme,
      calendar: opts.calendar,
      mark: opts.mark,
      done: function (value, date, endDate) {
        $(target).textbox('setValue', value);
        opts.onSelect.call(target, value, date, endDate);
      },
      change: function(value, date, endDate) {
        opts.onChange.call(target, value, date, endDate);
      }
    });
  }
  $.parser.plugins.push("laydate");//注册扩展组件
  $.fn.laydate = function (options, param) {
    if (typeof options == 'string') {
      var method = $.fn.laydate.methods[options];
      if (method) {
        return method(this, param);
      } else {
        return this.textbox(options, param);
      }
    }
    options = options || {};
    return this.each(function () {
      var state = $.data(this, 'laydate');
      if (state) {
        $.extend(state.options, options);
      } else {
        $.data(this, 'laydate', {
          options: $.extend({}, $.fn.laydate.defaults, $.fn.laydate.parseOptions(this), options)
        });
      }
      createBox(this);
    });
  };
  $.fn.laydate.methods = {
    options: function (jq) {
      var copts = jq.textbox('options');
      return $.extend($.data(jq[0], 'laydate').options, {
        width: copts.width,
        height: copts.height,
        originalValue: copts.originalValue,
        disabled: copts.disabled,
        readonly: copts.readonly
      });
    }
  };
  $.fn.laydate.parseOptions = function (target) {
    return $.extend({}, $.fn.textbox.parseOptions(target));
  };
  $.fn.laydate.defaults = $.extend({}, $.fn.textbox.defaults,
    {
      //laydate 参数说明:http://www.layui.com/doc/modules/laydate.html#type
      theme: "#0099cc",
      datetype: "date",//控件选择类型 year month date time datetime
      range: false,//开启左右面板范围选择 或 range: '~' 来自定义分割字符

      //最小/大范围内的日期时间值 
      //如果值为字符类型,则:年月日必须用 -(中划线)分割、时分秒必须用 :(半角冒号)号分割。这里并非遵循 format 设定的格式
      //如果值为整数类型,且数字<86400000,则数字代表天数,如:min: -7,即代表最小日期在7天前,正数代表若干天后
      //如果值为整数类型,且数字 ≥ 86400000,则数字代表时间戳,如:max: 4073558400000,即代表最大日期在:公元3000年1月1日
      min: '1900-1-1',
      max: '2099-12-31',

      format: "yyyy-MM-dd",//自定义格式
      zIndex: 66666666,//层叠顺序
      calendar: false,//是否显示公历节日

      //标注重要日子
      //每年的日期 {'0-9-18': '国耻'} 0 即代表每一年
      //每月的日期 {'0-0-15': '中旬'} 0-0 即代表每年每月(layui 2.1.1/layDate 5.0.4 新增)
      //特定的日期 {'2017-8-21': '发布')
      mark: {},
      onSelect: function (value, date, endDate) { },
      onChange: function (value, date, endDate) { }
    });

})(jQuery);

使用方法一:

<input name="BYXX" type="text" id="BYXX" class="easyui-laydate" data-options="width:200,datetype:'month'" />

使用方法二:

<input type="text" id="BYXX" />
  <script type="text/javascript">
    $(function () {
      $("#BYXX").laydate({ width: 200, datetype: 'month' });
    });
  </script>

别忘记引用jquery、easyui和laydate的js文件了哦

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
非常不错的一个javascript 类
Nov 07 Javascript
js跨域和ajax 跨域问题的实现思路
Sep 05 Javascript
深入探密Javascript数组方法
Jan 08 Javascript
JavaScript数据结构和算法之图和图算法
Feb 11 Javascript
JavaScript定时器和优化的取消定时器方法
Jul 03 Javascript
AngularJs实现ng1.3+表单验证
Dec 10 Javascript
JS基于面向对象实现的拖拽功能示例
Dec 20 Javascript
利用Mongoose让JSON数据直接插入或更新到MongoDB
May 03 Javascript
jQuery中图片展示插件highslide.js的简单dom
Apr 22 jQuery
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
Feb 15 jQuery
Vue触发input选取文件点击事件操作
Aug 07 Javascript
JavaScript架构localStorage特殊场景下二次封装操作
Jun 21 Javascript
Vue无限滑动周选择日期的组件的示例代码
Jul 18 #Javascript
微信小程序修改swiper默认指示器样式的实例代码
Jul 18 #Javascript
webpack4.x打包过程详解
Jul 18 #Javascript
vue系列之requireJs中引入vue-router的方法
Jul 18 #Javascript
Vue隐藏显示、只读实例代码
Jul 18 #Javascript
详解vue中axios的封装
Jul 18 #Javascript
详解vue2.0监听属性的使用心得及搭配计算属性的使用
Jul 18 #Javascript
You might like
php与XML、XSLT、Mysql的结合运用实现代码
2009/11/19 PHP
php中动态调用函数的方法
2015/03/16 PHP
php基于数组函数实现关联表的编辑操作示例
2017/07/04 PHP
php服务器的系统详解
2019/10/12 PHP
Aster vs Newbee BO3 第三场2.18
2021/03/10 DOTA
Prototype 学习 工具函数学习($方法)
2009/07/12 Javascript
jQuery实现批量判断表单中文本框非空的方法(2种方法)
2015/12/09 Javascript
jQuery禁用键盘后退屏蔽F5刷新及禁用右键单击
2016/01/22 Javascript
AngularJS中处理多个promise的方式
2016/02/02 Javascript
vue跨域解决方法
2017/10/15 Javascript
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
浅析微信小程序modal弹窗关闭默认会执行cancel问题
2019/10/14 Javascript
原生js实现无缝轮播图效果
2021/01/28 Javascript
Python采集腾讯新闻实例
2014/07/10 Python
Python常用库推荐
2016/12/04 Python
浅谈flask源码之请求过程
2018/07/26 Python
python程序 线程队列queue使用方法解析
2019/09/23 Python
信号生成及DFT的python实现方式
2020/02/25 Python
python编写实现抽奖器
2020/09/10 Python
python绘制分布折线图的示例
2020/09/24 Python
用 python 进行微信好友信息分析
2020/11/28 Python
详解CSS3中border-image的使用
2015/07/18 HTML / CSS
HTML5中drawImage用法分析
2014/12/01 HTML / CSS
世界上最大的二手相机店:KEN
2017/05/17 全球购物
请介绍一下WSDL的文档结构
2013/03/17 面试题
自我评价的正确写法
2013/09/19 职场文书
业务副厂长岗位职责
2014/01/03 职场文书
捐书寄语赠言
2014/01/18 职场文书
中专生自我鉴定范文
2014/02/02 职场文书
大学毕业感言50字
2014/02/07 职场文书
导航工程专业自荐信
2014/09/02 职场文书
用人单位聘用意向书
2015/05/11 职场文书
校园歌手大赛主持词
2015/07/03 职场文书
班主任经验交流心得体会
2015/11/02 职场文书
Vue Element UI自定义描述列表组件
2021/05/18 Vue.js
铁头也玩根德 YachtBoy YB-230......
2022/04/05 无线电