layui 有第三方比较好的三级联动,多级联动插件。但有时候,因为特殊要求,满足不了需要。这个时候就需要修改源码了。
先看插件文档以及实例。
https://fly.layui.com/extend/selectN,selectM/#doc
https://moretop.gitee.io/layui-select-ext/
特殊需要
1,需要回调。虽然不需要回调 form 提交一样可以拿到数据。可有时候前端就是需要有回调,需要看到具体的变化。这个时候就得改源码了。
2,删除对象时候,需要 confirm 确定后,才能删除。
修改
selectN 三级联动全只读。在初始化的时候,删除 select dom 即可。当然,也需要从 config 中添加配置,读配置。
//只读删除 select 组件,删除图标
if (c.allRead) {
$E.find('.layui-anim').remove();
$E.find('.layui-edge').remove();
$E.find('input').attr("readonly", true);
}
selectM 回调。在 config 中配置回调函数,并在初始化的时候指定好回调函数。在数据变化的时候,判断下是否有回调函数。存在就回调过去。
if (c.change && typeof c.change === "function" && typeof c.change.nodeType !== "number") {
c.change(values);
}
selectM 删除确定。同样在 config 中配置变量,默认不需要确定。初始化的时候配置好即可。当需要删除对象的时候,先看是否存在需要确认的变量。不需要则直接删除。需要则先弹出 confirm 框,看操作。
$E.on('click','a i',function(e){
this.delete = function() {
var _this = $(this).prev('span');
var v = _this.attr('lay-value');
if(v){
var _dd = $(c.elem).find('dd[lay-value='+v+']');
_dd.removeClass('layui-this');
_dd.find('.layui-form-checkbox').removeClass('layui-form-checked');
}
o.setSelected();
_this.parent().remove();
e.stopPropagation();
};
if (o && o.config && o.config.confirm) {
layer.confirm('您确定要删除该选项?', {btn:['确定']}, (index) =>{
this.delete();
layer.close(index);
});
return;
}
this.delete();
});