导入layui没报错但格式不显示_关于layui踩过的坑

本文记录了在使用layui前端框架过程中遇到的问题及其解决办法,包括layui模块的正确引入,select表单元素美化,laydate日期插件的使用,layui图片上传功能,layer弹框的调整以及日期范围动态切换等。同时,文中提供了针对layui组件不显示、日期格式不匹配、表单元素不美化等问题的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做二手车的后台系统搭建,前端使用的框架是 layui,现在我对layui进行一下简单的记录。

layui兼容Ie7以上所有浏览器,内置了很多好用的模块,包括弹框(div,简单的按钮组,iframe,msg)分页,表格,表单,文件上传,日期等模块,而模块的引入也十分人性化,使用layui.use引入相应的所需模块,类似于require.js

layui.use(['layer', 'form'], function(){

var layer = layui.layer

,form = layui.form;

});

今天总结一下在使用layui过程中遇到的问题

1.内置模块功能不能用 一定要用use引入 你要使用的组建,并在内部函数中声明一次。

layui.use(['table','laypage'], function(){

var table = layui.table, 表格

$= layui.jquery, 内置jquery

form = layui.form, 表单

laypage = layui.laypage; 分页

var beginTime,endTime;

var laydate = layui.laydate; 日期组建

var limit=10,page=1;

//日期组建的

laydate.render({

elem: '#date',

range: true

,ready: function(date){

// console.log(date); //得到初始的日期时间对象:{year: 2017, month: 8, date: 18, hours: 0, minutes: 0, seconds: 0}

}

,done: function(value, date, endDate){

$('#date').css('width',200);

var arrTime=value.split(' - ');

beginTime=arrTime[0];

endTime=arrTime[1]

}

});

});

2019-09-23

layui内容弹框模块 layer ,当页面 引入其他模块的时候 由于依赖关系 会自动引入,当页面 没有引入其他模块 ,而需使用layer的时候 ,需要 layui.use('layer') 即可使用

2.layui中 slect form表单元素 不美化显现的问题

1.layui中美化的表单元素 在渲染完成要添加 form.render()

$.each($('#classId option'),function (i, v) {

if($(v).val()==data.id){

$(v).attr("selected","selected")

}

})

form.render()

2.渲染之后还是没有,检查一下html结构 是否在父级元素上有layui-form的类名

商品单位:

3.layui select 多选框

官方文档并没有 select多选框 不过大牛们利用layui改造了很多select的多选框  社区有一些介绍 戳这里  我用的是select多选v3版本 有一些问题 但是对于目前的功能比较适合 地址戳这里 这里对select v.3的功能介绍展示的很全 以后用到可以直接访问

select.v4地址 戳这里

接下来 我记录一下 我的使用  效果图如下

471d80a3299782aba6ae76c0149c0353.png

(1)现引入资源 刚附上的链接里 拿来直接用的资源

7f04abe2f11de5b94759fd6e6c5f9559.png

(2)在页面引入 js

39dbeae1eb8f8741af916b34a6d23fb3.png

还有一种方式 是将js引入到layui的资源js中

和其他内置模块一样 引入模块名 并且调用 但是这个需要配置一下路径

layui.use(['table','upload','laypage','formSelects'], function(){

var upload = layui.upload,laydate = layui.laydate,form = layui.form,$ = layui.$;var formSelects = layui.formSelects

html中

xm-select-search 搜索

xm-select-type 样式类型

xm-select 选择器标志 和js中 对应

js中  一般layui 中表单渲染 是from.render()

formSelects.render({

name: 'select', 和xm-select对应 标志应用

on: function(data, arr){

var a='';

$.each(arr,function (i,v) {

a+=v.val+','

})

//把多选的内容存储起来

goodCreate.serviceNetworkIdStr=a.slice(0,-1)

}

});

(3)赋值,当用户已经编辑过一次 如何反写回去呢

formSelects.value('select',  serviceNetworkIdArr);

serviceNetworkIdArr是一个数组 是option的value组成的数组

formSelects.value('select');//获取选中的值

formSelects.value('select', 'val');//获取选中的val数组

formSelects.value('select', 'name');//获取选中的name数组

formSelects.value('select', [1, 3]);//动态赋值

4.layui 日期插件laydate 闪没 问题

问题描述:当页面高度不够时(高度不够,指的是 input输入框下面的页面高度 小于 时间控件的高度),时间控件,点击以后 会闪没,当退出页面 ,再返回以后,时间控件正常出现;

eb38ea064eb6494313643705803a4180.png

解决方法:

将触发 方法 改为 click

laydate.render({

elem: '#birthLeader'

,trigger: 'click'

});

效果:无论是否 高度足够,均可以出现 控件 ,当高度不够时,会遮挡 input输入框

c3aaf5f9c2ea6d04d5b3188ea72fa93e.png

5.layui图片上传

看需求 ,是否  同步还是异步上传

a7feba633a6309159d66f94955e4c7e8.png

1.异步上传   点击上传照片 按钮  就上传到服务器,返回线上图片地址,等提交表单提交的时候 ,将其它表单信息 和 图片的线上地址 一起提交

var uploadLeader = upload.render({

elem: '#upMan' //绑定元素

,accept:'images'

// ,auto:'false'

,auto:'true' //默认为true ,异步提交

,url:'/upfile/img'

,size:'1024' //限制 kb

,before: function(obj){ //obj参数包含的信息,跟 choose回调完全一致,可参见上文。

layer.load(); //上传loading

}

,choose:function (obj) {

//将每次选择的文件追加到文件队列

var files = obj.pushFile();

//预读本地文件,如果是多文件,则会遍历。(不支持ie8/9)

obj.preview(function(index, file, result) {

// console.log(index); //得到文件索引

// console.log(file); //得到文件对象

// console.log(result); //得到文件base64编码,比如图片

//下面这个只是为了操作画面 并没有上传 应该上传成功以后 执行 done中执行

$('#upMan').parents('.add-img-box ').find('img').attr('src',result)

})

}

,done: function(res){

layer.closeAll('loading'); //关闭loading

//上传完毕回调

//将图片替换为上传的图片

$('#upMan').parents('.add-img-box ').find('img').attr('src',res.data)

}

,error: function(){

layer.closeAll('loading'); //关闭loading

//请求异常回调

}

});

2.同步提交 ,点击上传照片,后 仅仅 将图片的base64格式 存储下来,并不掉接口,等表单提交的时候,将其他表单信息以及图片的base64 字符串 一起提交

var uploadLeader = upload.render({

elem: '#upMan' //绑定元素

,accept:'images'

,auto:'false'

,size:'1024' //限制 kb

,choose:function (obj) {

//将每次选择的文件追加到文件队列

var files = obj.pushFile();

//预读本地文件,如果是多文件,则会遍历。(不支持ie8/9)

obj.preview(function(index, file, result) {

// console.log(index); //得到文件索引

// console.log(file); //得到文件对象

// console.log(result); //得到文件base64编码,比如图片

//下面这个只是为了操作画面 并没有上传 应该上传成功以后 执行 done中执行

$('#upMan').parents('.add-img-box ').find('img').attr('src',result)

})

}

});

6.layer.open 弹框 出现 object object

6a2d0213d8999a47c3ae7d547818ef3a.png

layer.open({

title: '添加团队团员'

,area: ['400px','520px']

,btn: []

,content: $('#form-box')

当content为一个 dom元素的时候,弹出框出现异常

解决办法:  将type设置为 1,内容就正常了

layer.open({

title: '添加团队团员'

,type:1

,area: ['400px','520px']

,btn: []

,content: $('#form-box')

});

fae8eea756d5d9c7936fe1814662c6d8.png

7.弹出框 不居中问题

正常情况下,弹出框 默认是居中的位置(在没有offset的情况下),现在 遇到一个问题,弹出框 水平居中,高度偏下,解决办法

1.动态改变位置

layer.style(index 的值 弹出框 唯一标识, {

top: '50%',

transform:'translateY(-50%)'

});

2.由于弹出框 fixed,定位,但是 内容高度 获取不对,此时 给body添加 ,height:100%;也可以解决

8.关于页面layer报错

有很多时候,这个页面不需要用到layui的form,table,或者其他模块,所以

不引用 这些模块

layui.use(['form','laydate','upload'], function(){代码})

,但需要用到layer模块,此时 直接调用会报错

$('.dele').click(function () {

layer.open({

title: '在线调试'

,content: '可以填写任意的layer代码'

});

})

而在有引用 form,table等模块的时候,直接调用并不会报错,能够正常使用

这是因为,模块之间的相互依赖,当引用这些功能性模块的时候,会自动引用layer,但是当不使用其他模块的时候,只需要layer的时候需要 单独引入 ,像下面这样

layui.use(['layer']);

$('.dele').click(function () {

layer.open({

title:'test',content:'可以填写任意的layer代码'});

})

就不会报错了

8.关于lay-search 属性 英文区分大小写的问题

中国

其他

layui提供搜索功能,切搜索是根据option的text而不是value值,这样很便捷,但是layui这里对于英文来说是区分大小写的,所以 英文输入的时候 不太便捷 需要修改源码进行优化

a6b468ea3b8f1d58db9274e889bd61d4.png

在layui.all.js和form.js中  搜索 无匹配项,修改两处 转为大写 此时 就会不区分大小写了

9.laydate无法正常显示的问题,

laydate接受的格式默认为 datetime类型下 为:yyyy-MM-dd HH:mm:ss,当数据库数据为 yyyy-MM-dd HH:mm的时候 ,会由于格式不正确,而导致无法正常显示的问题

laydate.render({

elem: '#goTime',

type:'datetime',

format:'yyyy-MM-dd HH:mm'

});

解决办法:1.在读数据的时候,动态判断并修改格式为统一

2.前后台,数据保持统一性,防止此类问题发生

10.上传图片 当重复提交同一个图片 无法再次吊起( input file也是一样)

解决办法:

<1>. 当图片是异步上传 可以在选择上传完 对文件队列 进行删除

, choose: function (obj) {

var files = this.files = obj.pushFile(); //将每次选择的文件追加到文件队列

}

, done: function (res, index, upload) {

alert(index);

layer.msg('添加失败!');

//var files = upload.pushFile();

delete this.files[index]

//console.log(res)

}

<2>.修改源码 当单个图片是异步上传 可以在选择上传完 对文件队列 进行清空

69ad729cfbf36e2a3a1d8953285b09d6.png

<3>当图片是同步上传,上传完成后,需要保存 ,等待和form一起提交 ,就不可以 清空,或者 利用两个input进行提交

var imgUpload=upload.render({

elem: '#upMan' //绑定元素

,accept:'file'

,auto:false

// ,size:'1024' //限制 kb

,choose:function (obj) {

//将每次选择的文件追加到文件队列

var files = obj.pushFile();

//预读本地文件,如果是多文件,则会遍历。(不支持ie8/9)

obj.preview(function(index, file, result) {

common.clearError('headImg')

if(common.isImg(file.name)){

//新增 图片裁剪

if(file.sizecommon.imgSzieMin ){

//新增 图片裁剪

$(".dialog").show();

$('#image').cropper('destroy').attr('src', result).cropper({

aspectRatio: 377/472, // 纵横比

viewMode: 1,

guides: false,

});

$(".finish").on('click', function () {

//确定裁剪

crop();

$(".dialog").hide();

});

$(".cancle").on('click', function () {

//裁剪取消

crop_cancle();

$(".dialog").hide();

});

// $('#headImg').val(result);

// $('#upMan').parents('.add-img-box ').find('img').attr('src',result)

//新增 图片裁剪

}else{

common.nameEroor($('#headImg'),'文件大小必须在50k和350k之间!',)

common.errorAlert('文件大小必须在50k和350k之间!')

}

//新增 图片裁剪

}else{

common.nameEroor($('#headImg'),'仅支持jpg图片格式!')

common.errorAlert('仅支持jpg图片格式!')

}

})

imgUpload.config.elem.next()[0].value = ''

}

});

27d0b20f3d8d5bf49d33b31d54077183.png

提供一个博客 写过相关解决办法 以供参考 地址

11.日期范围 动态切换问题

laydate 提供了 日期范围 可以选择,不过正常需求中,日期范围一般都是 动态可变的 ,所以 来写一下实现这个的方法

//两个时间绑定

var startDate=laydate.render({

elem:'#intime'

,trigger: 'click'

,min: '2019-10-06'

,max: '2019-10-07'

,done: function(value, date, endDate){

console.log(value); //得到日期生成的值,如:2017-08-18

if($('#outtime').val().replace(/\-/g,'')<=$('#intime').val().replace(/\-/g,'')){

var index=layer.open({

title: '警告'

,content: '入住时间不能比离开时间晚'

,yes: function(index, layero){

//关闭弹框

layer.close(index);

$('#intime').val('')

}

});

}else{

// 根据选中的值 获取数据 重新渲染页面

homeSurplus()

}

}

});

//重新设置 最大值 最小值 并重新渲染

function timeMaxMinChange(startDateMin,startDateMax){

//注意,月份是从 0开始 到11

startDate.config.min ={

year:timeForm(endDateMIn).year,

month:timeForm(endDateMIn).month,

date: timeForm(endDateMIn).date,

hours: 0,

minutes: 0,

seconds : 0

};

startDate.config.max ={

year:timeForm(endDateMax).year,

month:timeForm(endDateMax).month,

date: timeForm(endDateMax).date,

hours: 0,

minutes: 0,

seconds : 0

};

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值