详解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 相关文章推荐
JS获取父节点方法
Aug 20 Javascript
Javascript 键盘keyCode键码值表
Dec 24 Javascript
jQuery.deferred对象使用详解
Mar 18 Javascript
Treegrid的动态加载实例代码
Apr 29 Javascript
jQuery的文档处理程序详解
May 10 Javascript
关于数据与后端进行交流匹配(点亮星星)
Aug 03 Javascript
JS实现购物车特效
Feb 02 Javascript
使用vue-cli打包过程中的步骤以及问题的解决
May 08 Javascript
jQuery创建及操作xml格式数据示例
May 26 jQuery
js 数组详细操作方法及解析合集
Jun 01 Javascript
babel7.x和webpack4.x配置vue项目的方法步骤
May 12 Javascript
vue+egg+jwt实现登录验证的示例代码
May 18 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文件向另一个地址post数据,不用表单和隐藏的变量的
2007/03/06 PHP
CakePHP去除默认显示的标题及图标的方法
2008/10/22 PHP
图文详解PHP环境搭建教程
2016/07/16 PHP
PHP入门教程之面向对象基本概念实例分析
2016/09/11 PHP
Jquery 高亮显示文本中重要的关键字
2009/12/24 Javascript
Javascript 实用小技巧
2010/04/07 Javascript
妙用Jquery的val()方法
2012/06/27 Javascript
jQuery使用andSelf()来包含之前的选择集
2014/05/19 Javascript
kindeditor修复会替换script内容的问题
2015/04/03 Javascript
Nodejs抓取html页面内容(推荐)
2016/08/11 NodeJs
遍历js中对象的属性和值的实例
2016/11/21 Javascript
使用Promise链式调用解决多个异步回调的问题
2017/01/15 Javascript
微信小程序 参数传递实例代码
2017/03/20 Javascript
JavaScript操作文件_动力节点Java学院整理
2017/06/30 Javascript
vue和better-scroll实现列表左右联动效果详解
2019/04/29 Javascript
vue实现前台列表数据过滤搜索、分页效果
2019/05/28 Javascript
使用easyui从servlet传递json数据到前端页面的两种方法
2019/09/05 Javascript
vue中keep-alive,include的缓存问题
2019/11/26 Javascript
解决vue单页面 回退页面 keeplive 缓存问题
2020/07/22 Javascript
[43:24]VG vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
浅谈python在提示符下使用open打开文件失败的原因及解决方法
2018/11/30 Python
python 2.7 检测一个网页是否能正常访问的方法
2018/12/26 Python
python3实现mysql导出excel的方法
2019/07/31 Python
Python模拟FTP文件服务器的操作方法
2020/02/18 Python
Centos7下源码安装Python3 及shell 脚本自动安装Python3的教程
2020/03/07 Python
Python MOCK SERVER moco模拟接口测试过程解析
2020/04/13 Python
基于SQLAlchemy实现操作MySQL并执行原生sql语句
2020/06/10 Python
使用keras实现非线性回归(两种加激活函数的方式)
2020/07/05 Python
Python 转移文件至云对象存储的方法
2021/02/07 Python
上课打牌的检讨书
2014/02/15 职场文书
高中军训感言800字
2014/03/05 职场文书
禁烟标语大全
2014/06/11 职场文书
秋季校运会广播稿100字
2014/09/18 职场文书
再婚婚前财产协议书范本
2014/10/19 职场文书
关于学习的决心书
2015/02/05 职场文书
关于清明节的演讲稿2015
2015/03/18 职场文书