详解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 相关文章推荐
一个基于jquery的文本框记数器
Sep 19 Javascript
jQuery中.live()方法的用法深入解析
Dec 30 Javascript
jquery自动填充勾选框即把勾选框打上true
Mar 24 Javascript
js操作输入框中选择内容兼容IE及其他主流浏览器
Apr 22 Javascript
Easyui form combobox省市区三级联动
Jan 13 Javascript
老生常谈JavaScript数组的用法
Jun 10 Javascript
Bootstrap编写一个在当前网页弹出可关闭的对话框 非弹窗
Jun 30 Javascript
JS产生随机数的用法小结
Dec 10 Javascript
详解angular中如何监控dom渲染完毕
Jan 03 Javascript
Angular+ionic实现折叠展开效果的示例代码
Jul 29 Javascript
jQuery实现动态加载瀑布流
Sep 01 jQuery
原生JavaScript实现换肤
Feb 19 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
全国FM电台频率大全 - 7 吉林省
2020/03/11 无线电
PHP管理内存函数 memory_get_usage()使用介绍
2012/09/23 PHP
php简单获取目录列表的方法
2015/03/24 PHP
PHP网络操作函数汇总
2015/05/18 PHP
thinkphp3.x中display方法及show方法的用法实例
2016/05/19 PHP
iis6手工创建网站后无法运行php脚本的解决方法
2017/06/08 PHP
javascript addBookmark 加入收藏 多浏览器兼容
2009/08/15 Javascript
IE和Firefox下event事件杂谈
2009/12/18 Javascript
浅析Prototype的模板类 Template
2011/12/07 Javascript
HTML上传控件取消选择
2013/03/06 Javascript
js中settimeout方法加参数的使用实例
2014/02/27 Javascript
跟我学习javascript的arguments对象
2015/11/16 Javascript
详解js中Json的语法与格式
2016/11/22 Javascript
JavaScript的变量声明提升问题浅析(Hoisting)
2016/11/30 Javascript
使用MUI框架模拟手机端的下拉刷新和上拉加载功能
2017/09/04 Javascript
浅谈实现vue2.0响应式的基本思路
2018/02/13 Javascript
微信web端后退强制刷新功能的实现代码
2018/03/04 Javascript
node实现的爬虫功能示例
2018/05/04 Javascript
微信小程序 拍照或从相册选取图片上传代码实例
2019/08/28 Javascript
js实现开关灯效果
2020/03/30 Javascript
vue中的使用token的方法示例
2020/03/10 Javascript
Vue跨域请求问题解决方案过程解析
2020/08/07 Javascript
Python入门篇之正则表达式
2014/10/20 Python
Python统计日志中每个IP出现次数的方法
2015/07/06 Python
python 实时遍历日志文件
2016/04/12 Python
python 生成器协程运算实例
2017/09/04 Python
Python Threading 线程/互斥锁/死锁/GIL锁
2019/07/21 Python
在CentOS7下安装Python3教程解析
2020/07/09 Python
Hawes & Curtis官网:英国经典品牌
2019/07/27 全球购物
英国奢华护肤、美容和Spa品牌:Temple Spa
2019/11/02 全球购物
Levi’s西班牙官方网站:李维斯,著名的牛仔裤品牌
2020/08/20 全球购物
淘宝店策划方案
2014/06/07 职场文书
2015应届毕业生自荐信范文
2015/03/05 职场文书
研究生导师推荐信
2015/03/25 职场文书
涨价通知怎么写
2015/04/23 职场文书
道歉的话语大全
2015/05/12 职场文书