jQuery动态添加laydate解决方案
今天做项目的某个模块功能,需要jQuery动态添加laydate来实现,上图:
每点击添加一次就要生成一个laydate框,开始直接绑定css实现,发现已有的输入框可以正常弹出laydate,但是点击添加按钮生成出来的却没反应,在网上找了好久,还学到了一个前端名词事件委托(本人搞java的不懂这些,见笑了),然后尝试用事件委托来实现,初次尝试如下(#timediv为laydate框最外层包裹的div):
发现确实可以显示,但是会闪一下,然后在layUI官网看到一个小姐姐是这样写的:
这样比上面好很多,可以直接点击就显示,但是还是不完美,弹出的时间选择框会抖动一下,后面发现有大佬在layUI论坛是这样做的,每次动态生成时,写laydate渲染一次,完美解决这个问题,如下:
layui.use(['form', 'table', 'laydate', 'layer', 'upload'], function () {
var form = layui.form,
table = layui.table,
laydate = layui.laydate,
layer = layui.layer,
upload = layui.upload;
var $ = layui.jquery;
//时间选择器
lay(".advanceDate").each(function(){
laydate.render({
elem: this
,type: 'time'
,format: 'HH:mm'
});
});
//动态添加
$("#add").click(function(){
$("#timediv").append('<input style="margin-bottom:5px;" type="text" name="addTitle" placeholder="请选择活动开始时间" lay-verify="required" lay-reqtext="活动开始时间不能为空" autocomplete="off" class="layui-input advanceDate">');
lay(".advanceDate").each(function(){
laydate.render({
elem: this
,type: 'time'
,format: 'HH:mm'
,trigger: 'click' //点击触发
});
});
});
})
jQuery动态生成时渲染,必须加上trigger: ‘click’,不然会弹出时间选择框会闪一下
就说到这里,因为花了很长时间来解决(毕竟咱是干后端的),来给大家分享一下,也是处女作哦
参考链接
https://fly.layui.com/jie/15185/
https://blog.csdn.net/MrLiber/article/details/82626427
http://fly.layui.com/jie/18089/
https://blog.csdn.net/kingrome2017/article/details/79769652