JS实现文本控件编辑后根据条件显示样式

我是社区第485122位番薯,欢迎点我头像关注我哦~
1. 概述
1.1 问题描述

使用条件属性可以设置对单元格或文本控件在初始化时,根据条件属性显示不同的样式,如字体大小,颜色等等。但是在单元格控件编辑后,值发生了生改变,显示的样式依旧还是原来初始化后的样式,并没有根据编辑后的值改变样式。

比如参考 条件属性 修改高考成绩显示样式,小于 60 显示红色告警,大于或等于60恢复黑色,初始化时单元格样式发生了改变,但是如果在单元格设置了文本控件后,编辑后不会发生变化。


那么,如何解决这种在实际填报中可能发生值变化,而样式随之变化呢。

1.2 实现思路

利用控件编辑结束事件事件,采用 JS 取单元格值,获取单元格文本框控件,再根据预期的条件分别判断,设置样式,即可。


2. 示例
2.1 模板样式

在 B3/B4 单元格添加文本控件,B3 单元格值为 59,B4 单元格值为 90,设置 条件属性,小于 60 为红色,大于或等于 60 为黑色,如下图:

2.2 添加编辑后事件

给 B4/B5 的文本控件,添加编辑后事件,如下图:

JS 代码如下:

  1. var td = $(arguments[0]);//获取当前编辑的单元格
  2. var value = this.getValue();//取值
  3. if (value < 60) {
  4.     td.css({
  5.         "color": "red"//设置字体为红色
  6.     });
  7.     td.css({
  8.         "font-weight": "bold" //设置加粗
  9.     });
  10. } else {
  11.     td.css({
  12.         "color": "black"//设置字体颜色恢复黑色
  13.     });
  14.     td.css({
  15.         "font-weight": "normal"//设置为普通字体
  16.     });
  17. }
复制代码

注:采用编辑结束事件而不是编辑后事件是为了减少编辑时重复判断,避免模板多次计算。


2.3 预览效果

保存模板,选择填报预览,PC 端实现效果下图所示:


可以看到,单元格控件编辑后,显示的样式根据编辑后的值进行了变化,就达到了我们预期的效果。

注:此 JS 不支持移动端使用


3. 模板下载

模板效果在线查看请点击:JS 实现文本控件编辑后根据条件显示样式.cpt

已完成的模板,可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\JS\填报预览JS实例\32-JS实现文本控件编辑后根据条件显示样式.cpt

点击下载模板:32-JS实现文本控件编辑后根据条件显示样式.cpt



编辑于 2020-12-4 14:27  

发表于 2020-12-14 19:24:21
这个模板有问题,如果去掉原本的59和90的值,根本无法正常显示
发表于 2022-11-23 14:59:56
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

2回帖数 2关注人数 6487浏览人数
最后回复于:2022-11-23 14:59

返回顶部 返回列表