解決layui時間控制項清空之後無法正常使用的問題,以及時間範圍的選擇
共有兩種解決方式:
方式一( layui 1.x):
html程式碼:
<div class="layui-inline"> <div class="layui-input-inline"> <input type="text" name="start_time" class="layui-input" id="start_time" placeholder="开始时间(修改时间)"> </div> </div> <div class="layui-inline"> <div class="layui-input-inline"> <input type="text" name="end_time" class="layui-input" id="end_time" placeholder="结束时间(修改时间)"> </div> </div> js代码: var start = { istime: true, format: 'YYYY-MM-DD hh:mm:ss', max: '2099-06-16 23:59:59', istoday: true, choose: function (datas) { end.min = datas; //开始日选好后,重置结束日的最小日期 } }; var end = { istime: true, format: 'YYYY-MM-DD hh:mm:ss', max: '2099-06-16 23:59:59', istoday: true, choose: function (datas) { start.max = datas; //结束日选好后,重置开始日的最大日期 } }; document.getElementById('start_time').onclick = function () { start.elem = this; laydate(start); }; document.getElementById('end_time').onclick = function () { end.elem = this; laydate(end); };
方式二(layui 2.x):
html程式碼
<div class="layui-inline"> <div class="layui-input-inline"> <input type="text" name="start_time" class="layui-input" id="start_time" placeholder="开始时间(修改时间)"> </div> </div> <div class="layui-inline"> <div class="layui-input-inline"> <input type="text" name="end_time" class="layui-input" id="end_time" placeholder="结束时间(修改时间)"> </div> </div> js代码 layui.use([ 'laydate'], function(){ var $ = layui.$; var laydate = layui.laydate; var nowTime = new Date().valueOf(); var max = null; var start = laydate.render({ elem: '#start_time', type: 'datetime', max: nowTime, btns: ['clear', 'confirm'], done: function(value, date){ endMax = end.config.max; end.config.min = date; end.config.min.month = date.month -1; } }); var end = laydate.render({ elem: '#end_time', type: 'datetime', max: nowTime, done: function(value, date){ if($.trim(value) == ''){ var curDate = new Date(); date = {'date': curDate.getDate(), 'month': curDate.getMonth()+1, 'year': curDate.getFullYear()}; } start.config.max = date; start.config.max.month = date.month -1; } });
根據開始時間動態限制結束時間 知識點 type: 'datetime', 是帶時分秒的date 是不帶時分秒的
layui.use('laydate', function(){ /* lay('.layui-input').each(function(){ laydate.render({ elem: this ,trigger: 'click' ,change: function(value, date, endDate){ console.log(value); //得到日期生成的值,如:2017-08-18 console.log(date); //得到日期时间对象:{year: 2017, month: 8, date: 18, hours: 0, minutes: 0, seconds: 0} console.log(endDate); //得结束的日期时间对象,开启范围选择(range: true)才会返回。对象成员同上。 } }); }); */ var $ = layui.$; var laydate = layui.laydate; var nowTime = new Date().valueOf(); var max = null; var start = laydate.render({ elem: '#start_time', type: 'datetime', btns: ['clear', 'confirm'], done: function(value, date){ endMax = end.config.max; end.config.min = date; end.config.min.month = date.month -1; }, change: function(value, date, endDate){ var timestamp2 = Date.parse(new Date(value)); timestamp2 = timestamp2 / 1000; end.config.min = timestamp2; end.config.min.month = date.month -1; } }); var end = laydate.render({ elem: '#end_time', type: 'date', done: function(value, date){ console.log(" ====== "+date); if($.trim(value) == ''){ var curDate = new Date(); date = {'date': curDate.getDate(), 'month': curDate.getMonth()+1, 'year': curDate.getFullYear()}; } start.config.max = date; start.config.max.month = date.month -1; } }); });
透過以上程式碼,就已經可以實現動態改變開始時間最大值與結束時間最小值的改變了。下面來說一下容易遇到的坑:
坑一:laydate.render無法重複渲染,當laydate.render對應一個elem已經渲染過一次之後,我們是無法透過再次渲染來修改其中的max值與min值的。
坑二:startDate.config.max與endDate.config.min是一個對象,不是一個字串,endDate.config.min="2017-01-01";實際上這裡得到的是一個對象,有別於我們渲染時的min與max了,直接將字串賦值必然沒有效果。
坑三:dates的格式雖然與endDate.config.min格式相同但是直接讓endDate.config.min=dates你會發現並不是你想要的結果,是因為雖然dates中的資料是你選擇的日期,可是endDate.config.min中設定的month的值卻比你輸入的month的值大了一個月,因此假如你選的開始日期是11月13日,直接賦值給了endDate.config .min之後你會發現結束日期的最小日期變成了12月13日,因此我們需要將dates中的月份值減一後再賦值給endDate.config.min。
更多layui知識請關注PHP中文網layui教學欄位
以上是layui時間控件選擇時間的詳細內容。更多資訊請關注PHP中文網其他相關文章!