laydate.js,在选择分后才会触发choose事件,现在选择日就会触发choose

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了laydate.js,在选择分后才会触发choose事件,现在选择日就会触发choose相关的知识,希望对你有一定的参考价值。

laydate.js,在选择分后才会触发choose事件,现在选择日就会触发chooselaydate.js,在选择分后才会触发choose事件,现在选择日就会触发chooselaydate.js,在选择分后才会触发choose事件,现在选择日就会触发choose

参考技术A 前言

laydate.js是属于javascript系列的一款日期控件与时间插件,laydate.js支持兼容IE6在内的主流浏览器。laydate.js经过贤心大大的重写之后功能越来越强大,用起来也愈渐灵活了,但是在一个基于angular+ocLazyLoad的项目中出了点问题。

发现问题

laydate.js是通过ocLazyLoad异步加载引入的,结果始终加载不出来laydate.css文件,看了下路径错误,于是扒开代码发现是这样写的:

getPath:function() var e=document.scripts, t=e[e.length-1], n=t.src; if(!t.getAttribute("merge")) return n.substring(0,n.lastIndexOf("/")+1) ()
它是需要先获取到laydate.js的路径,然后再加上laydate.css的那一截最终拼接成一个完整的路径。

作者用的获取laydate.js路径的思路是:由于判断路径的js代码一般都直接放在js文件中而不是函数中,所以当加载该js文件时会立即执行其中的语句,而执行此语句时所获取到的js文件数目正好是e.length-1,因为页面后面的js文件还没有加载,所以该处的js文件获取的数目并不是页面所有的js文件的数目。这样一来,获取路径就无需再遍历了,而且文件判断也无需文件名,判断更加准确(e.length-1永远都是其文件本身)。

但是这种方法有缺陷,直接在html页面中用script标签引入没得问题,如果通过document.write("<script src='*.js'></script")或document.createElement("script")动态加载亦或者异步加载等得到的路径却是最后一个js文件的路径,而非当前j文件的路径。

于是想起了document.currentScript ,一步就能到位,但是存在一定的兼容性问题。

var curSrc = document.currentScript.src; return curSrc.substring(0,curSrc.lastIndexOf("/")+1);
最终还是使用了下面这种简单粗暴的方法:

getPath:function() var e=document.scripts, n; for(var i=e.length;i>0;i--) if(e[i-1].src.indexOf("laydate.js")>-1) n=e[i-1].src.substring(0,e[i-1].src.lastIndexOf("/")+1); return n; ()
这种方法的思路很清晰,根据文件名获取引用的文件的src属性并进行判断截取即可。但这种办法有以下两个缺点:

1、需要遍历页面的所有js文件,有时可能效率会比较低。(我页面的js文件没几个,哈哈)

2、如果页面中出现目录不同的重名的js文件则可能判断错误。

LayUI laydate日期选择器自定义 快捷选中今天昨天 本周本月等等

1. 引入laydata插件

  下载 https://blog-static.cnblogs.com/files/zhangning187/laydate.js laydate.js

  替换laydate.js,就可以直接使用自定义快捷选中了

 

2.自定义控件选取值

 1 laydate.render({
 2         elem: ‘#freeTimeInput‘, //指定元素
 3         range: true,
 4         trigger: ‘click‘, //采用click弹出
 5         value: ‘‘,
 6         extrabtns: [
 7             {
 8                 id: ‘today‘,
 9                 text: ‘今天‘,
10                 range: [new Date(new Date().setDate(new Date().getDate())), new Date(new Date().setDate(new Date().getDate()))]
11             },
12             {
13                 id: ‘yesterday‘,
14                 text: ‘昨天‘,
15                 range: [new Date(new Date().setDate(new Date().getDate() - 1)), new Date(new Date().setDate(new Date().getDate() - 1))]
16             },
17             {
18                 id: ‘lastday-7‘,
19                 text: ‘近7天‘,
20                 range: [new Date(new Date().setDate(new Date().getDate() - 7)), new Date(new Date().setDate(new Date().getDate() - 1))]
21             },
22             {
23                 id: ‘lastday-30‘,
24                 text: ‘近30天‘,
25                 range: [new Date(new Date().setDate(new Date().getDate() - 30)), new Date(new Date().setDate(new Date().getDate() - 1))]
26             }
27         ],
28         done: function (val, stdate, ovdate) {
29             // 确认选择事件后调用
30         }
31     });

 

2.样式如下图

技术图片

 

以上是关于laydate.js,在选择分后才会触发choose事件,现在选择日就会触发choose的主要内容,如果未能解决你的问题,请参考以下文章

laydate.js 月份区间选择插件

LayUI laydate日期选择器自定义 快捷选中今天昨天 本周本月等等

LayUI laydate日期选择器自定义 快捷选中今天昨天 本周本月等等

angluar4使用非npm安装的js插件和cnpm下使用bootstrap遇到的问题

前端组件:超好用的日期选择器,支持全部日期格式已经Vue.js中的使用

Swift/iOS:UIPicker 显示在以编程方式更改数据源后点击后才会刷新