使用layui table过程中需要组合用到laydate日期控件实现日期搜索的功能,但使用过程中会发现laydate点击第一次触发弹出控件后,点击第二次就不弹出控件了。
情况1:
table使用toolbar: '#toolbarDemo'
toolbarDemo对应的js代码:
<script type="text/html" id="toolbarDemo">
<div class="demoTable">
<span class="layui-inline">
<input type="text" class="layui-input" id="tiwendakamain_dkdate" placeholder="请选择日期" readonly=""/>
</span>
<span class="layui-inline">
<div class="layui-btn-group">
<button class="layui-btn" data-type="reload">搜索</button>
</div>
</span>
</div>
</script>
html页面代码:
<div class="layui-fluid">
<div class="layui-row layui-col-space15">
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-body">
<table id="table" lay-filter="table"></table>
</div>
</div>
</div>
</div>
</div>
只需要laydate渲染的对象在table渲染的对象之后就行了,先渲染table再渲染laydate,如下:
table.render({
elem: '#table'
,toolbar: '#toolbarDemo'
});
laydate.render({
elem: '#tiwendakamain_dkdate' //指定元素
});
如果顺序错了就导致第二次点击日期控件弹不出的问题。
情况2:
table不使用toolbar: '#toolbarDemo' ,日期控件直接写入html页面
html页面代码:
<div class="layui-fluid">
<div class="layui-row layui-col-space15">
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-body">
<div class="demoTable">
<span class="layui-inline"> <input type="text"
class="layui-input" id="tiwendakaReportBydkstate_dkdate" placeholder="请选择打卡日期" readonly=""
/> </span>
<span class="layui-inline">
<div class="layui-btn-group">
<button class="layui-btn" data-type="reload" id="btnSelect">
搜索
</button>
</div> </span>
</div>
<table id="table" lay-filter="table"></table>
</div>
</div>
</div>
</div>
</div>
这种情况,laydate渲染的对象和table渲染的对象是不区分先后的,无论哪个先渲染都可以。如下:
laydate.render({
elem: '#tiwendakamain_dkdate' //指定元素
});
table.render({
elem: '#table'
,toolbar: '#toolbarDemo'
});
总结:laydate日期控件只弹出一次,问题其实是出在table的toolbar,应该是toolbar封装后缓存的问题。由于缓存存在导致laydate渲染对象的elem属性没有发生变化,elem属性不变laydate也就不会再弹出了。