js控制多层单选,多选按钮,做隐藏操作
项目中遇到多层级单选,多选按钮的置灰/隐藏操作。特意写了一个公用组件:
//置灰方式
//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控制多层单选,多选按钮,做隐藏操作的更多相关文章
- 微信小程序 修改(自定义) 单选/复选按钮样式 checkbox/radio样式自定义
参考文章: 微信小程序 修改(自定义) 单选/复选按钮样式 checkbox/radio样式自定义
- JS控制文本框中的密码显示/隐藏功能
<html> <head> <title>[荐]JS控制文本框中的密码显示/隐藏功能_网页代码站(www.6a8a.com)</title> <s ...
- jqurey 遍历 div内的所有input单选复选按钮并判断是否选中及Attr(checked)无效的解决
关于页面前面标签 <ul> @{ foreach (var item in vote) { if (!string.IsNullOrEmpty(item.Img)) { <li cl ...
- 微信小程序 自定义单选复选按钮组的实现(用于实现购物车产品列表功能)
(一)单选按钮组 模型图如下: index.js Page({ data: { parameter: [{ id: 1, name: '银色' }, { id: 2, name: '白色' },{ i ...
- 简单的纯css重置input单选多选按钮的样式--利用伪类
由于input单选多选的原生样式通常都不符合需求,所以在实现功能时通常都需要美化按钮 html <input type="radio" /> <input typ ...
- JS 控制checkbox 获取 全选 全不选 一行不选择全选则不被选择 所有选择全选被选择
//点击全选button的事件操作 function selectAll(){ var allcheckBoxs=document.getElementsByName("iTo") ...
- js根据选中的复选框,隐藏那一行
如图,选择复选框,点击“隐藏”按钮,隐藏选中行 1.JavaScript代码: function getCheckedIds() { var checkedSubject = $('#showSbgl ...
- 表单form的属性,单行文本框、密码框、单选多选按钮
基础表单结构: <body> <h1> <hr /> <form action="" name="myFrom" en ...
- jQuery 与js判断是否单选复选选中
js判断复选:这段代码昨天网上查看的资料没保存出处,抱歉 var obj=document.getElementsByName("diseaseSet"); //选择所有name= ...
随机推荐
- linux awk使用详解
转载:https://www.cnblogs.com/xudong-bupt/p/3721210.html awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的 ...
- RNA-seq中的基因表达量计算和表达差异分析
RNA-seq中的基因表达量计算和表达差异分析 差异分析的步骤:1)比对:2) read count计算:3) read count的归一化:4)差异表达分析: 背景知识:1)比对:普通比对: BWA ...
- JS的深浅拷贝
项目中根据各种需求或多或少会需要用到拷贝,通过查询整理之后今天简单的记录一下. 我们可以利用 slice.concat 返回一个新数组的特性可以实现数组的拷贝. var arr = ['a', 1, ...
- linux常用命令简介
不管是测试还是开发,平时或多或少都要用到Linux命令,下面就把平时必用的一些命令简单总结哈,快学快用 1. ls : 列举当前目录下文件.子目录的名字,如图举例: (1) ls -l : ...
- poj 3126 Prime Path bfs
题目链接:http://poj.org/problem?id=3126 Prime Path Time Limit: 1000MS Memory Limit: 65536K Total Submi ...
- sqlserver全文检索
转载地址:https://www.cnblogs.com/qianzf/p/7131741.html
- 分享一个mac for redis-desktop-manager破解版安装包
链接: https://pan.baidu.com/s/1BDndGmBlWoSr4hVLpF3FVw 提取码: wwir
- Chapter5_初始化与清理_enum关键字
enum关键字虽然只是一个很小的特性,但是它在我们使用枚举类型时,可以很方便的处理.先举一个例子. enum Speciness{ NOT, MILD, MEDIUM, HOT, FLAMING } ...
- hw3
1. 2.将MAXPRIMES的值设为4,t2会发生越界错误,t1不会. 3.令n = 1,此时不满足while语句的判断条件,不执行while循环. 4. 点覆盖:{1,2,3,4,5,6,7,5, ...
- truncate和delete命令的优缺点和原理解析,适用场合
1.相同点:truncate和delete只删除数据不删除表的结构2.不同点:truncate.drop是数据库定义语言,操作立即生效,元数据不会放到rollback segement中,不能回滚,操 ...