需求背景如下:

原项目居民、单位、计量三模块共用一个jsp文件,显示的页面也顺理成章的统一了,幸亏没有调用同一个js,在此基础上要求居民和单位计量的分离,即居民的显示居民的相关信息,单位和计量的显示相同的信息,时间久远,仅有的未修改前的页面截图如下(红框内字段已替换成红字):

需求分析:

(1)项目中添加字段并实现增删改查功能

(2)页面的展示,居民显示居民相关字段,单位和计量显示单位相关字段

字段添加这里不再赘述,主要分析页面的显示

刚开始拿到这个需求,打算另外新建单位相关的jsp页面(只包含单位相关字段),使得在居民模块显示居民的页面,单位和计量显示单位的页面,但涉及jsp较多(包括增加、修改、复制增加、面积录入、面积变更、面积信息变更、详细信息等),且增加页面后,相关js文件也需要和其匹配,改动量较大,于是采用另一种方法——使用class控制字段的显示与隐藏,这样的话,jsp文件和js文件数量不需要增加,只在相关页面进行增加字段、设置class值和在js里调用方法就可以了。实现如下(以用户增加页面为例):

1.仔细分析在哪个模块哪些字段需要显示和隐藏,做好基本排版

比如居民用户增加时上图基本信息中的单位名称就需要隐藏,单位用户增加时基本信息中的用户相关的就不应该显示了,需要显示单位相关的,小区一栏也需要隐藏,转而显示添加的单位相关的账号、开户行等字段

2.为需要隐藏的字段设置class,这里注意有的字段需要在不同页面显示不同的名称,但在数据库里是同一个字段的,应该用同一个输入框。(如图中用户编码,在用户增加界面名称是‘用户编码’,在单位增加界面显示‘单位编码’,在数据库用的是同一个字段—【yhbm】)

sf_user_add.jsp

共用一个字段

 <tr>
<!--hideForJlyh: 增加单位和计量用户时需要隐藏的属性 jmyhHidden: 增加居民用户时需要隐藏的属性 -->
<!-- 为居民时显示用户编码,为单位和计量时显示单位编码 共用 yhbm 字段-->
<td class="labelCss mustWrite hideForJlyh" >
   用户编码:
</td>
<td class="labelCss mustWrite jmyhHidden" >
单位编码:
</td>
<td class="contentCss">
<input type="text" id="yhbm" name="sfjmyh.yhbm" value="" onchange="checkYhbm(this.value);"
        class="easyui-validatebox" data-options="required:true"/>
</td>

互相占坑的

<!-- 用户时显示用户名称,单位时显示单位名称 -->
<tr>
<td class="labelCss mustWrite hideForJlyh" >
用户名称:
</td>
<td class="contentCss hideForJlyh">
<input type="text" id="yhmc" name="sfjmyh.yhmc" class="easyui-validatebox" value="" />
</td> <td class="labelCss jmyhHidden">
单位名称:
</td>
<td class="contentCss jmyhHidden">
  <input type="text" id="dwmc" name="sfjmyh.dwmc" value="" />
</td>
<td class="labelCss mustWrite hideForJlyh">
<!-- 添加计量功能时,由于要隐藏,故去掉必填属性 required="true" -->
  小区:
</td>
<td class="contentCss hideForJlyh">
  <select id="xq" name="sfjmyh.xq" class="easyui-validatebox" >
  </select>
</td> <td class="labelCss jmyhHidden">
  账户:
</td>
  <td class="contentCss jmyhHidden">
  <input type="text" id="zh" name="sfjmyh.zh" value="" />
</td>

3.js方法控制字段隐藏与显示

sf_user_info.js(居民页面控制js)

function addUserInitSelect() {
comboboxInit("");
$('#rwrq').val(new Date().format("yyyy-MM-dd")); //结算方式那默认选择面积结算,并且不可修改
$('#jsfs').combobox('setValue','面积结算'); //居民时隐藏
$(".jmyhHidden").css("display","none");
//设置用户名称为必填
$("#yhmc").attr("required",true);
}

sf_unitUser_info.js(单位页面控制js)

function addUserInitSelect() {
comboboxInit("");
$('#rwrq').val(new Date().format("yyyy-MM-dd")); //单位基础信息增加时,隐藏小区字段,默认值为“单位待定”
$('#xq').combobox('setValue','单位待定');
//结算方式那默认选择面积结算,并且不可修改
//$("#jsfs").combobox('readonly',true);
$('#jsfs').combobox('setValue','面积结算');
//计量和单位增加时隐藏
$(".hideForJlyh").css("display","none");
}

效果:

此方法存在以下几个问题需要注意:

(1)字段排版设计较为费时,因为一个字段隐藏后,它原先占得位置将空出来,造成页面的不美观,解决方法是同一个位置最好设置两个在不同模块显示的字段(如小区和账户)

(2)原先共用一个jsp,所以必填项在标签内设置就可以了,但是隐藏字段后,如果该字段是必填项,将不能提交,所以必填项应在各自js里设置

(3)虽然开发时间减少,但对其他开发人员阅读有影响,因为其他人不一定了解你的这个处理方法,所以要注意沟通好该处理方法,此外在代码内写详细注释

(4)项目中字段共用问题和新增字段,列出表格,发给一同开发的人员,如下

xiaban...

通过设置标签class值控制标签的显示与隐藏的更多相关文章

  1. legend3---19、要更多的从服务器端控制元素的显示和隐藏,而不要是页面端

    legend3---19.要更多的从服务器端控制元素的显示和隐藏,而不要是页面端 一.总结 一句话总结: 这样可以控制很多页面端的非法操作 1.html标签中data方式的数据,修改之后在标签上只显示 ...

  2. 微信小程序点击控制元素的显示与隐藏

    微信小程序点击控制元素的显示与隐藏 首先我们先来看一下单个点击效果 我们来看一下wxml中的代码: <view class="conten"> <view cla ...

  3. css3-10 如何控制元素的显示和隐藏(display和visibility的区别是什么)

    css3-10 如何控制元素的显示和隐藏(display和visibility的区别是什么) 一.总结 一句话总结:使用的时候直接在元素的样式中设置display和visibility属性即可.推荐使 ...

  4. jquery控制css的display(控制元素的显示与隐藏)

    使用jquery控制div的显示与隐藏: $("#div的id").show()表示display:block, $("#div的id").hide()表示di ...

  5. jquery控制元素的显示与隐藏

    比如要控制div的显示与隐藏,一句话就搞定了.$("#id").show()表示display:block,$("#id").hide()表示display:n ...

  6. swift 如何控制view的显示与隐藏

    swift 如何控制view的显示与隐藏 UIView有一个属性 hidden let line: UILabel = UILabel() 默认是显示的 需要显示它的时候:line.hidden = ...

  7. 原生JS的移入溢出控制div的显示与隐藏

    原生JS的移入溢出控制div的显示与隐藏的写法 上面的写法火狐存在兼容性

  8. 简简单单,jquery中,使用checkbox控制div的显示与隐藏

    今天开发代码时,发现好久不用jquery就生疏了. 所以作这个记录, 使用checkbox控制div的显示与隐藏. 一,html代码处: <input type="checkbox&q ...

  9. html标签,格式控制标签,内容容器标签,超链接标签,图片标签,表格

    打开DREAMWEAVER,新建HTML,如下图: body的属性: bgcolor 页面背景色 background  背景壁纸.图片 text  文字颜色 topmargin  上边距 leftm ...

随机推荐

  1. JZYZOJ1524 [haoi2012]外星人 欧拉函数

    http://172.20.6.3/Problem_Show.asp?id=1524 大概可以算一个结论吧,欧拉函数在迭代的时候,每次迭代之后消去一个2,每个非2的质因子迭代一次又(相当于)生成一个2 ...

  2. [BZOJ 1562] 变换序列

    Link: BZOJ 1562 传送门 Solution: 一道比较考对$Hungry$算法理解的题目 首先可以轻松看出原序列和答案序列的对应关系,从而建出二分图匹配模型 下面的关键在于如何保证字典序 ...

  3. AGC 022 B - GCD Sequence

    题面在这里! 锻炼脑子的小构造题... 一开始被 a[]<=30000 且 序列 gcd = 1所困扰,但是发现这并没有什么,因为我接下来发现了一种总是能构造出 序列和是6的倍数的方案. 首先如 ...

  4. python基础之re,sys,suprocess模块

    re 正则表达式 1.什么是正则? 正则就是用一系列具有特殊含义的字符组成的规则,该规则用来描述具有某一特征的字符串. 正则就是用来在一个大的字符串匹配出符合规则的子字符串 2.为什么用正则? 正则可 ...

  5. ERROR 1044: Access denied for user: 'songyan' to database 'yikexiao' 的错误。

    问题描述:新买的服务器,刚安装了mysql,创建了一个用户,也忘记了给他分配了什么权限,今天在建库的时候出现了这个问题. 出错原因:度娘告诉我是因为songyan用户没有建库的权限报的错. 解决: ( ...

  6. [转]spring security的原理及教程

    Authentication:认证     spring security使用分类: 如何使用spring security,相信百度过的都知道,总共有四种用法,从简到深为:1.不用数据库,全部数据写 ...

  7. MYSQL5上运行多个实例

    date 20131005参考http://chenzehe.iteye.com/blog/1266260官方文档 http://dev.mysql.com/doc/refman/5.1/zh/dat ...

  8. GMT-CMSP系统维护步骤整理

    一.关闭前端各服务1.北京代理,韩国代理节点nginx/etc/init.d/nginx stop2.关闭WEB1,WEB2 NGINX和PHPpkill nginx && pkill ...

  9. Run-Time Check Failure #0

    Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is ...

  10. mysql join优化

    http://www.jb51.net/article/50427.htm 七.性能优化1.显示(explicit) inner join VS 隐式(implicit) inner join 如: ...