详解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 获取中文拼音,Select自动匹配字母获取值的代码
Sep 23 Javascript
JavaScript 解析Json字符串的性能比较分析代码
Dec 16 Javascript
jQuery左右滚动支持图片放大缩略图图片轮播代码分享
Aug 26 Javascript
JS折半插入排序算法实例
Dec 02 Javascript
js实现小窗口拖拽效果
Dec 03 Javascript
解析利用javascript如何判断一个数为素数
Dec 08 Javascript
JavaScript中防止微信浏览器被整体拖动的方法
Aug 25 Javascript
一步步教你利用webpack如何搭一个vue脚手架(超详细讲解和注释)
Jan 08 Javascript
原生JS实现的双色球功能示例
Feb 02 Javascript
详解使用VUE搭建后台管理系统(vue-cli更新至3.0)
Aug 22 Javascript
微信小程序日历效果
Dec 29 Javascript
Vue中component标签解决项目组件化操作
Sep 04 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程序
2012/02/04 PHP
CodeIgniter框架中_remap()使用方法2例
2014/03/10 PHP
YII使用url组件美化管理的方法
2015/12/28 PHP
yii2实现根据时间搜索的方法
2016/05/25 PHP
PHP实现与java 通信的插件使用教程
2019/08/11 PHP
JQuery扩展插件Validate—4设置错误提示的样式
2011/09/05 Javascript
jquery获取复选框被选中的值
2014/04/10 Javascript
深入理解JavaScript中的并行处理
2016/09/22 Javascript
Webpack+Vue如何导入Jquery和Jquery的第三方插件
2017/02/20 Javascript
vue父组件向子组件传递多个数据的实例
2018/03/01 Javascript
Vue组件开发技巧总结
2018/03/04 Javascript
Vue入门之animate过渡动画效果
2018/04/08 Javascript
Node.js模块全局安装路径配置方法
2018/05/17 Javascript
vue2过滤器模糊查询方法
2018/09/16 Javascript
vue-router结合vuex实现用户权限控制功能
2019/11/14 Javascript
javascript事件循环event loop的简单模型解释与应用分析
2020/03/14 Javascript
vue实现购物车功能(商品分类)
2020/04/20 Javascript
JS实现多功能计算器
2020/10/28 Javascript
python通过floor函数舍弃小数位的方法
2015/03/17 Python
python查看zip包中文件及大小的方法
2015/07/09 Python
通过数据库向Django模型添加字段的示例
2015/07/21 Python
Python快速查找list中相同部分的方法
2018/06/27 Python
详解关于Django中ORM数据库迁移的配置
2018/10/08 Python
pygame实现雷电游戏雏形开发
2018/11/20 Python
Django Form 实时从数据库中获取数据的操作方法
2019/07/25 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
2020/02/11 Python
Python动态导入模块和反射机制详解
2020/02/18 Python
sklearn+python:线性回归案例
2020/02/24 Python
自荐信的五个重要部分
2013/10/29 职场文书
车间班长岗位职责
2013/11/30 职场文书
公司业务员岗位职责
2014/03/18 职场文书
遗产继承公证书
2014/04/09 职场文书
银行求职信范文怎么写
2015/03/20 职场文书
经营场所证明范本
2015/06/19 职场文书
重温入党誓词主持词
2015/06/29 职场文书
python将图片转为矢量图的方法步骤
2021/03/30 Python