项目中遇到多层级单选,多选按钮的置灰/隐藏操作。特意写了一个公用组件:

//置灰方式
//controllerArr数组添加如下数据:
//{ctrlName:"gds_anquanyuanshishi", hidType:1, hidArr:[{hidKey:"其他", hidName:"gds_qitashishi"},{hidKey:"aa", hidName:"gds_qitashishi1"}]}
//ctrlName:radio名字
//hidType:隐藏方式:1:disabled,2:hidden。
//hidArr:需要控制的数组 hidKey:需要匹配的值 hidName:需要隐藏的input /* 是radio时
遍历规则 找到匹配checkbox的规则项
匹配到key而且是checked时,隐藏框置亮, 遍历规则,找到对应的隐藏框
否则
隐藏级是text
清空置灰
隐藏级是radio
遍历radio
是checked
全部置灰
触发事件
隐藏级是checkbox
遍历checkbox隐藏级
状态是checked
触发click事件
是checkbox时
遍历规则 找到匹配checkbox的规则项
是checked时,隐藏框置亮
否则
隐藏级是text
清空置灰
隐藏级是radio
遍历radio
是checked
全部置灰
触发事件
隐藏级是checkbox
遍历checkbox隐藏级
状态是checked
触发click事件
*/
var HidItemUtil = {
hidType : 1,//隐藏方式:1:disabled, 2:display
controllerArr : [],
doHidItem : function(item, hidType){
var _self = this;
hidType = typeof hidType == "undefined" ? _self.hidType : hidType;
if(hidType == 1)
item.prop("disabled", "disabled");
else
item.hide();
},
doShowItem : function(item, hidType){
var _self = this;
hidType = typeof hidType == "undefined" ? _self.hidType : hidType;
if(hidType == 1)
item.prop("disabled", "");
else
item.show();
},
initHidList : function(controllerObj){
var _self = this;
$.each(controllerObj.hidArr, function(){
var hidType = typeof this.hidType != "undefined" ? this.hidType:controllerObj.hidType;
_self.itemsHide(this.hidName, hidType);
});
},
itemsShow : function(hidNameList, hidType){
var _self = this;
$.each(hidNameList, function(i, itemName){
_self.doShowItem($("[name$='" + itemName + "']"), hidType);
});
},
itemsHide : function(hidNameList, hidType){
var _self = this;
$.each(hidNameList, function(i, itemName) {
$("[name$='" + itemName + "']").each(function (i) {
if ($(this).prop("type") == "radio") {
$(this).prop("checked", false);
$(this).trigger("change");
} else if ($(this).prop("type") == "checkbox") {
if ($(this).prop("checked")) {
$(this).click();
}
} else if ($(this).prop("type") == "text") {
$(this).val("");
}
_self.doHidItem($(this), hidType);
});
});
},
run : function(){
var _self = this;
if(_self.controllerArr.length == 0){return;}
for(var i = 0; i < _self.controllerArr.length; i++){
var controllerObj = _self.controllerArr[i];
_self.initHidList(controllerObj); $("[name$='"+controllerObj.ctrlName+"']").on("change", controllerObj, function(obj){
var self = $(this);
var ctrlObj = obj.data;
var hidType = ctrlObj.hidType;
if(self.prop("type") == "radio"){ //radio时判断
for(var x=0; x<ctrlObj.hidArr.length; x++){
var hideObj = ctrlObj.hidArr[x];
hidType = typeof hideObj.hidType != "undefined" ? hideObj.hidType:hidType;
if($(this).val() == hideObj.hidKey && $(this).prop("checked")){ //$(this)是checked项
_self.itemsShow(hideObj.hidName, hidType);
}else{
_self.itemsHide(hideObj.hidName, hidType);
}
}
}else if(self.prop("type") == "checkbox"){//checkbox时判断
for(var j=0; j<ctrlObj.hidArr.length; j++){
var hideObj = ctrlObj.hidArr[j];
hidType = typeof hideObj.hidType != "undefined" ? hideObj.hidType:hidType;
if(self.val() == hideObj.hidKey){
if(self.prop("checked")){
_self.itemsShow(hideObj.hidName, hidType);
}else{
_self.itemsHide(hideObj.hidName, hidType);
}
}
}
}
});
}
}
};

调用方式:

<script>
$(document).ready(function(){
HidItemUtil.controllerArr.push({
ctrlName:"gds_ffshebei",
hidArr:[{
hidKey:"发放三合一红盘",
hidName:["gds_hpbmbh","gds_hpsq"]
},{
hidKey:"发放三合一设备",
hidName:["gds_sbbmbh","gds_sbsq"]
},{
hidKey:"发放其他设备",
hidName:["gds_qtsbqibmbh","span1",'gds_ysmiji','gds_xmiji']
},{
hidKey:"按申请要求配置相关端口及策略",
hidName:["gds_celue"]
},{
hidKey:"其他",
hidName:["gds_qita"]
}]
});
HidItemUtil.controllerArr.push({
ctrlName:"gds_qtsbqibmbh",
hidArr:[{
hidKey:"转换线",
hidName:["gds_qtsbzhxbmbh"]
},{
hidKey:"外接光驱",
hidName:["gds_qtsbwjgqbmbh"]
},{
hidKey:"其他",
hidName:["gds_sbbmbhqt","p1","level3"]
}]
});
HidItemUtil.controllerArr.push({
ctrlName:"level3",
hidArr:[{
hidKey:"选择1",
hidName:["level41"]
},{
hidKey:"选择2",
hidName:["level42"]
},{
hidKey:"选择3",
hidName:["level43"]
}]
});
HidItemUtil.run();
}); </script>

组件根据name匹配,html如下:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script src="jquery-1.10.2.min.js" ></script>
<script src="HidItemUtil.js" ></script> <script>
$(document).ready(function(){
HidItemUtil.controllerArr.push({
ctrlName:"gds_ffshebei",
hidArr:[{
hidKey:"发放三合一红盘",
hidName:["gds_hpbmbh","gds_hpsq"]
},{
hidKey:"发放三合一设备",
hidName:["gds_sbbmbh","gds_sbsq"]
},{
hidKey:"发放其他设备",
hidName:["gds_qtsbqibmbh","span1",'gds_ysmiji','gds_xmiji']
},{
hidKey:"按申请要求配置相关端口及策略",
hidName:["gds_celue"]
},{
hidKey:"其他",
hidName:["gds_qita"]
}]
});
HidItemUtil.controllerArr.push({
ctrlName:"gds_qtsbqibmbh",
hidArr:[{
hidKey:"转换线",
hidName:["gds_qtsbzhxbmbh"]
},{
hidKey:"外接光驱",
hidName:["gds_qtsbwjgqbmbh"]
},{
hidKey:"其他",
hidName:["gds_sbbmbhqt","p1","level3"]
}]
});
HidItemUtil.controllerArr.push({
ctrlName:"level3",
hidArr:[{
hidKey:"选择1",
hidName:["level41"]
},{
hidKey:"选择2",
hidName:["level42"]
},{
hidKey:"选择3",
hidName:["level43"]
}]
});
HidItemUtil.run();
}); </script>
<tr style="height:23px;">
<td class="formInput" style="word-break:break-all;border-color:#666666;" rowspan="1" colspan="5">
<p>
<label><input name="m:gds_wcxdsmjsjspjjc:gds_ffshebei" type="checkbox" value="发放三合一红盘" validate="{}" />发放三合一红盘 保密编号</label><span style="display:inline-block;" name="editable-input" isflag="tableflag"><input id="a1" name="m:gds_wcxdsmjsjspjjc:gds_hpbmbh" class="inputText" style="width:200px;" type="text" isflag="tableflag" lablename="红盘保密编号" validate="{maxlength:100}" /> 授权<span style="display:inline-block;" name="editable-input" isflag="tableflag"><input id="a2" name="m:gds_wcxdsmjsjspjjc:gds_hpsq" class="inputText" style="width:200px;" type="text" isflag="tableflag" lablename="红盘授权" validate="{maxlength:100}" /></span></span>
</p>
<p>
<label><input name="m:gds_wcxdsmjsjspjjc:gds_ffshebei" type="checkbox" value="发放三合一设备" validate="{}" />发放三合一设备 保密编号</label><span style="display:inline-block;" name="editable-input" isflag="tableflag"><input id="b1" name="m:gds_wcxdsmjsjspjjc:gds_sbbmbh" class="inputText" style="width:200px;" type="text" isflag="tableflag" lablename="设备保密编号" validate="{maxlength:100}" /> 授权<span style="display:inline-block;" name="editable-input" isflag="tableflag"><input id="b2" name="m:gds_wcxdsmjsjspjjc:gds_sbsq" class="inputText" style="width:200px;" type="text" isflag="tableflag" lablename="设备授权" validate="{maxlength:100}" /></span></span>
</p>
<p>
<label><input name="m:gds_wcxdsmjsjspjjc:gds_ffshebei" type="checkbox" value="发放其他设备" validate="{}" />发放其他设备</label>
<p>
<label><input name="m:gds_wcxdsmjsjspjjc:gds_qtsbqibmbh" type="radio" value="转换线" validate="{}" id="g1" />转换线</label>
<span style="display:inline-block;" name="span1" isflag="tableflag"><input id="c1" name="m:gds_wcxdsmjsjspjjc:gds_qtsbzhxbmbh" class="inputText" style="width:100px;" type="text" isflag="tableflag" lablename="其他设备转换线保密编号" validate="{maxlength:50}" /></span>
<label><input name="m:gds_wcxdsmjsjspjjc:gds_qtsbqibmbh" type="radio" value="外接光驱" validate="{}" id="g2" />外接光驱</label>
<span style="display:inline-block;" name="span1" isflag="tableflag"><input id="c2" name="m:gds_wcxdsmjsjspjjc:gds_qtsbwjgqbmbh" class="inputText" style="width:100px;" type="text" isflag="tableflag" lablename="其他设备外接光驱保密编号" validate="{maxlength:100}" /></span> <label><input name="m:gds_wcxdsmjsjspjjc:gds_qtsbqibmbh" type="radio" value="其他" validate="{}" id="g3" />其他</label>
<span style="display:inline-block;" name="span1" isflag="tableflag"> <input id="c3" name="m:gds_wcxdsmjsjspjjc:gds_sbbmbhqt" class="inputText" style="width:100px;" type="text" isflag="tableflag" lablename="设备保密编号其他" validate="{maxlength:100}" />
<p name="p1">
<label><input name="m:gds_wcxdsmjsjspjjc:level3" type="checkbox" value="选择1" validate="{}" />选择1</label><span style="display:inline-block;" name="editable-input" isflag="tableflag"><input id="e4" name="m:gds_wcxdsmjsjspjjc:level41" class="inputText" style="width:200px;" type="text" isflag="tableflag" lablename="其他" validate="{maxlength:100}" /></span>
<label><input name="m:gds_wcxdsmjsjspjjc:level3" type="checkbox" value="选择2" validate="{}" />选择2</label><span style="display:inline-block;" name="editable-input" isflag="tableflag"><input id="e2" name="m:gds_wcxdsmjsjspjjc:level42" class="inputText" style="width:200px;" type="text" isflag="tableflag" lablename="其他" validate="{maxlength:100}" /></span>
<label><input name="m:gds_wcxdsmjsjspjjc:level3" type="checkbox" value="选择3" validate="{}" />选择3</label><span style="display:inline-block;" name="editable-input" isflag="tableflag"><input id="e3" name="m:gds_wcxdsmjsjspjjc:level43" class="inputText" style="width:200px;" type="text" isflag="tableflag" lablename="其他" validate="{maxlength:100}" /></span>
</p>
</span>
</p>
</p>
<p>
<label><input name="m:gds_wcxdsmjsjspjjc:gds_ffshebei" type="checkbox" value="按申请要求配置相关端口及策略" validate="{}" />按申请要求配置相关端口及策略</label><span style="display:inline-block;" name="editable-input" isflag="tableflag"><input id="d1" name="m:gds_wcxdsmjsjspjjc:gds_celue" class="inputText" style="width:200px;" type="text" isflag="tableflag" lablename="策略" validate="{maxlength:100}" /></span>
</p>
<p>
<label><input name="m:gds_wcxdsmjsjspjjc:gds_ffshebei" type="checkbox" value="发放红黑电源" validate="{}" />发放红黑电源</label>
</p>
<p>
<label><input name="m:gds_wcxdsmjsjspjjc:gds_ffshebei" type="checkbox" value="其他" validate="{}" />其他</label><span style="display:inline-block;" name="editable-input" isflag="tableflag"><input id="e1" name="m:gds_wcxdsmjsjspjjc:gds_qita" class="inputText" style="width:200px;" type="text" isflag="tableflag" lablename="其他" validate="{maxlength:100}" /></span>
</p>
</td>
</tr>

js控制多层单选,多选按钮,做隐藏操作的更多相关文章

  1. 微信小程序 修改(自定义) 单选/复选按钮样式 checkbox/radio样式自定义

    参考文章: 微信小程序 修改(自定义) 单选/复选按钮样式 checkbox/radio样式自定义

  2. JS控制文本框中的密码显示/隐藏功能

    <html> <head> <title>[荐]JS控制文本框中的密码显示/隐藏功能_网页代码站(www.6a8a.com)</title> <s ...

  3. jqurey 遍历 div内的所有input单选复选按钮并判断是否选中及Attr(checked)无效的解决

    关于页面前面标签 <ul> @{ foreach (var item in vote) { if (!string.IsNullOrEmpty(item.Img)) { <li cl ...

  4. 微信小程序 自定义单选复选按钮组的实现(用于实现购物车产品列表功能)

    (一)单选按钮组 模型图如下: index.js Page({ data: { parameter: [{ id: 1, name: '银色' }, { id: 2, name: '白色' },{ i ...

  5. 简单的纯css重置input单选多选按钮的样式--利用伪类

    由于input单选多选的原生样式通常都不符合需求,所以在实现功能时通常都需要美化按钮 html <input type="radio" /> <input typ ...

  6. JS 控制checkbox 获取 全选 全不选 一行不选择全选则不被选择 所有选择全选被选择

    //点击全选button的事件操作 function selectAll(){ var allcheckBoxs=document.getElementsByName("iTo") ...

  7. js根据选中的复选框,隐藏那一行

    如图,选择复选框,点击“隐藏”按钮,隐藏选中行 1.JavaScript代码: function getCheckedIds() { var checkedSubject = $('#showSbgl ...

  8. 表单form的属性,单行文本框、密码框、单选多选按钮

    基础表单结构: <body> <h1> <hr /> <form action="" name="myFrom" en ...

  9. jQuery 与js判断是否单选复选选中

    js判断复选:这段代码昨天网上查看的资料没保存出处,抱歉 var obj=document.getElementsByName("diseaseSet"); //选择所有name= ...

随机推荐

  1. 响应式web设计(一)

    很多网页都是基于网格设计的,这说明网页是按列来布局的. 原理就是讲网页分成十二列,每列的宽度是8.33%,元素的宽度,用几列来定义,正是因为这一点,才可以做到响应,就是随着窗口宽度的变化,给元素分配不 ...

  2. spring boot利用controller来测试写的类

    我们在开发spring boot应用程序的时候,往往需要测试某个写好的类,但是在测试的时候发现不太好测试,用Junit等测试框架,总是会报一些问题,大致是找不到配置文件以及无法利用spring创建的对 ...

  3. java分布式电子商务云平台b2b b2c o2o需要准备哪些技术??

    技术解决方案 开发语言: java.j2ee 数据库:mysql JDK支持版本: JDK1.6.JDK1.7.JDK1.8版本 核心技术:分布式.云服务.微服务.服务编排等. 核心架构: 使用Spr ...

  4. Python json.dumps 自定义序列化操作

    def login_ajax(request): if request.method == "GET": return render(request, 'login_ajax.ht ...

  5. AspNet Core 认证

    一 Cookie认证 1  services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCooki ...

  6. 图解HTTP第三章

    HTTP 报文内的 HTTP信息 用于 HTTP 协议交互的信息被称为 HTTP 报文.HTTP 报文本身是由多行(用 CR+LF 作换行符)数据构成的字符串文本. HTTP 报文大致可以分为两类:请 ...

  7. linux系统下部署DNS正向解析

    DNS服务概述: DNS(Domain Name System)域名系统,能够提供域名与IP地址的解析服务. 正向解析 正向解析是指域名到IP 地址的解析过程. 部署DNS正向解析 DNS服务的三个配 ...

  8. 使用Python脚本分析你的网站上的SEO元素

    撰稿马尼克斯德芒克 上2019年1月, Sooda internetbureau Python就是自动执行重复性任务,为您的其他搜索引擎优化(SEO)工作留出更多时间.没有多少SEO使用Python来 ...

  9. JAVA经典算法50题(转)

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/51097928 JAVA经典算法50题 [程序1]   题目:古典问题:有一对兔子, ...

  10. excle记录

    比较两列不一样的数据 https://jingyan.baidu.com/article/fd8044fa23eef05030137a66.html