详解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 相关文章推荐
VBS通过WMI监视注册表变动的代码
Oct 27 Javascript
JavaScript中for..in循环陷阱介绍
Nov 12 Javascript
js arguments,jcallee caller用法总结
Nov 30 Javascript
jQuery实现瀑布流布局详解(PC和移动端)
Sep 01 Javascript
jQuery Uploadify 上传插件出现Http Error 302 错误的解决办法
Dec 12 Javascript
javascript仿百度输入框提示自动下拉补全
Jan 07 Javascript
使用bootstrap typeahead插件实现输入框自动补全之问题及解决办法
Jul 07 Javascript
微信小程序 删除项目工程实现步骤
Nov 10 Javascript
深入理解在JS中通过四种设置事件处理程序的方法
Mar 02 Javascript
基于JSONP原理解析(推荐)
Dec 04 Javascript
Vue.js实现备忘录功能
Jun 26 Javascript
微信小程序实现通讯录列表展开收起
Nov 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
兼容PHP5的PHP目录管理函数库
2008/07/10 PHP
php输出xml属性的方法
2015/03/19 PHP
php 在字符串指定位置插入新字符的简单实现
2016/06/28 PHP
PHP实现递归的三种方法
2020/07/04 PHP
HTTP状态代码以及定义(解释)
2007/02/02 Javascript
禁用页面部分JavaScript方法的具体实现
2013/07/31 Javascript
jquery 表单验证之通过 class验证表单不为空
2015/11/02 Javascript
JS实现获取剪贴板内容的方法
2016/06/21 Javascript
微信小程序使用第三方库Immutable.js实例详解
2016/09/27 Javascript
Kendo Grid editing 自定义验证报错提示的解决方法
2016/11/18 Javascript
Angular的模块化(代码分享)
2016/12/26 Javascript
Javascript 实现计算器时间功能详解及实例(二)
2017/01/08 Javascript
JS获取当前地理位置的方法
2017/10/25 Javascript
详解如何用模块化的方式写vuejs
2017/12/16 Javascript
JS实现二维数组横纵列转置的方法
2018/04/17 Javascript
JS同步、异步、延迟加载的方法
2018/05/05 Javascript
vue-router路由模式详解(小结)
2019/08/26 Javascript
webstorm建立vue-cli脚手架的傻瓜式教程
2020/09/22 Javascript
python字符类型的一些方法小结
2016/05/16 Python
TensorFlow模型保存和提取的方法
2018/03/08 Python
Python基础之条件控制操作示例【if语句】
2019/03/23 Python
OpenCV图像颜色反转算法详解
2019/05/13 Python
python适合人工智能的理由和优势
2019/06/28 Python
PyCharm使用之配置SSH Interpreter的方法步骤
2019/12/26 Python
python实现百度OCR图片识别过程解析
2020/01/17 Python
Python字符编码转码之GBK,UTF8互转
2020/02/09 Python
Python实现异步IO的示例
2020/11/05 Python
简单介绍CSS3中Media Query的使用
2015/07/07 HTML / CSS
美国LOGO设计公司:The Logo Company
2018/07/16 全球购物
Notino法国:购买香水和化妆品
2019/04/15 全球购物
澳大利亚宠物食品和用品商店:PETstock
2020/01/02 全球购物
农药学硕士毕业生自荐信
2013/09/25 职场文书
小学生开学第一课活动方案
2014/03/27 职场文书
质量保证书格式模板
2015/02/27 职场文书
2015年行政执法工作总结
2015/05/23 职场文书
网络安全倡议书(3篇)
2019/09/18 职场文书