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

//置灰方式
//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. openstack系列文章(1)devstack安装测试Queens

    1.在OpenStack 圈子中,有这么一句名言:”不要让朋友在生产环境中运行DevStack.但是初学者在没有掌握OpenStack CLI的情况下用devstack安装测试环境还是不错的.本系列文 ...

  2. 探索未知种族之osg类生物---渲染遍历之认识SceneView

    前言 我们在进行osg程序的开发时,最常用到的场景管理方式是“场景节点树”的结构,     a 场景树底端的叶节点(osg::Geode)包含了各种需要渲染的几何体的顶点和渲染状态信息:     b  ...

  3. Biopython 安装使用

    Biopython 官网:https://biopython.org/ 安装 Biopython  https://biopython.org/wiki/Download 可以使用 pip 进行安装, ...

  4. Java实现产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。

    public static void main(String[] args){ //创建一个int数组,长度为100, int n = 100; int[] arrayInt = new int[n] ...

  5. 【Selenium】【BugList5】chrom窗口未关闭,又新开窗口,报错:[8564:8632:0522/111825.341:ERROR:persistent_memory_allocator.cc(845)] Corruption detected in shared-memory segment.

    环境信息:Windows7 64位 + python 3.6.5 + selenium 3.11.0 +pyCharm 解决方法: 执行 driver = webdriver.Chrome()前必须把 ...

  6. LOL新版符文 怎么查看队友的符文配置?

    LOL怎么看其他玩家符文? 像我这种名字都懒的打的, 直接去WeGame复制昵称. 然后在LOL主界面点生涯, 之后搜索 光头强xian生

  7. 分布式文件系统 fastdfs搭建

    fastdfs第一步:在home文件夹下建立tar文件夹第二步:cd /home/tar///(Libevent 是一个用C语言编写的.轻量级的开源高性能事件通知库,主要有以下几个亮点:事件驱动( e ...

  8. python编程之如何在Windows上安装python

    一.安装python 首先检查你的系统里是否安装了python,开始菜单里点击运行输入cmd打开一个命令窗口,或键盘快捷键windows+R打开,在窗口中输入python并回车,如果出现了Python ...

  9. aircrakf

    airmon-ng start wlan0 airodump-ng wlan0mon#find the wifi airodump-ng -w yakoazz -c 1 --bssid BE:5F:F ...

  10. Python开发——16.HTML

    一.HTML 1.服务端 import socket def main(): sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) sock. ...