问题总结(1)

215 阅读2分钟

背景

总结记录项目《作战数据系统》负责后台和JSP页面开发期间,遇到的问题及解决方法。(持续更新)

Layui时间控件

使用官方默认格式(date),给控件绑定点击事件,当点击日期后,触发事件。执行事件内的方法时,方法体内通过 $("#time").val() 成功获取到存入指定元素的选择日期值。
因业务需求,将日期控件定义为year格式,年份选择后必须点击确认才能触发点击事件。执行方法体内$("#time").val()获取到的是存入新值前的旧值。
解决方法:

  1. 直接将选择的value写入到指定元素内,不等待layui的渲染。
done: function(value){
    $("#time").val(value);
   }
  1. 将选择的value作为参数直接传入调用的方法,不使用元素选择器获取值。
done: function(value){
    test(value);
   }

Layui下拉框

页面拥有数个tab切换按钮,根据选择的按钮生成对应的下拉框。通过点击执行方法,从数据库获取所需内容,在页面上进行拼接,通过.appendTo()放入指定的下拉框元素中。
当先后调用下拉框生成方法 a() 和数据查询方法 b()时(b方法通过元素选择器获取下拉框默认值),由于Layui渲染慢,方法b获取值时,Layui下拉框渲染还未完成,获取到的是渲染前的值。
解决方法:

  1. 将方法b嵌套在方法a中,当a获取到下拉框的内容后,直接调用方法b,将所需值传给b进行查询,之后再渲染下拉框。
  2. 在数据量小的时候,给b方法设置延时,保证在下拉框完全渲染完成后才调用查询方法。(非常不推荐使用延时)

echarts弹窗

给echarts添加点击事件,触发弹窗,生成多层遮罩bug。
原因:图表生成前只使用了clear()清除画布,未使用dispose()清除实例,导致图表每一次重新生成都产生一个新的实例,遮罩出现层数和实例数相等。