最近在使用layui实现动态渲染垂直导航栏时,出现下拉菜单样式丢失问题。
<ul class="layui-nav layui-bg-cyan" id="menu" lay-filter='ul_1'></ul>
layui.use('element', function() {
var element = layui.element; //导航的hover效果、二级菜单等功能,依赖element模块
var iJSON = {};
var iHtml = '';
$.ajax({
url : iPath ,
type : "post",
async : false,
success : function(data) {
//将layui在页面加载时渲染出来的span.layui-nav-bar提前删除掉
$("#menu").find('span.layui-nav-bar').remove();
iJSON = JSON.parse( data );
for(var i in iJSON){
iHtml += dropMenuCode(iJSON[i].name,iJSON[i].childNode);
}
$("#menu").html( iHtml );
var layFilter = $("#menu").attr('lay-filter');
element.render('menu', layFilter);
}
});
});
以上参考自:https://blog.csdn.net/qq_41299195/article/details/83116289
之前尝试过使用form.render()来重新渲染ul,但是发现layui不支持。但是其他需要渲染的元素可以尝试一下,例如:select,checkbox,radio。
<div class="layui-form" lay-filter="menu">
<select></select>
</div>
layui.use('form', function(){
var form = layui.form; //引入form
//如果HTML是动态生成的,自动渲染会失效,需要重新进行渲染 form.render(type, filter);
form.render(); //渲染全部
form.render('select'); //渲染select选择框
form.render('select', 'menu'); //渲染 lay-filter="menu" 所在容器内的全部 select
form.render(null, 'menu'); //渲染 lay-filter="menu" 所在容器内的全部表单元素
form.render('ul','menu'); //layui不支持这样渲染ul!!!!!
});
首先,在表单所在的父元素添加 class=“layui-form”(可以是任何普通元素,不仅限于form元素,例如上述示例的div也可以 )。
其次,添加 layui的form依赖。
最后,渲染。
关于form.render(type, filter);
第一个参数:type,值:select,checkbox,radio。设置需要刷新的元素。
第二个参数:filter,为 class=“layui-form” 所在元素的 lay-filter="" 的值。借助该参数可对表单完成局部更新。