惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog RSS Feed
美团技术团队
Attack and Defense Labs
Attack and Defense Labs
博客园 - 三生石上(FineUI控件)
Y
Y Combinator Blog
IT之家
IT之家
GbyAI
GbyAI
博客园_首页
酷 壳 – CoolShell
酷 壳 – CoolShell
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 聂微东
量子位
阮一峰的网络日志
阮一峰的网络日志
Hugging Face - Blog
Hugging Face - Blog
Recent Announcements
Recent Announcements
月光博客
月光博客
The GitHub Blog
The GitHub Blog
V
Visual Studio Blog
D
DataBreaches.Net
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 司徒正美
罗磊的独立博客
人人都是产品经理
人人都是产品经理
U
Unit 42
宝玉的分享
宝玉的分享
V
V2EX
雷峰网
雷峰网
C
Cyber Attacks, Cyber Crime and Cyber Security
博客园 - 叶小钗
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
L
LINUX DO - 热门话题
Engineering at Meta
Engineering at Meta
P
Palo Alto Networks Blog
Scott Helme
Scott Helme
Cisco Talos Blog
Cisco Talos Blog
Apple Machine Learning Research
Apple Machine Learning Research
Cyberwarzone
Cyberwarzone
腾讯CDC
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cybersecurity and Infrastructure Security Agency CISA
爱范儿
爱范儿
V
Vulnerabilities – Threatpost
Martin Fowler
Martin Fowler
P
Privacy & Cybersecurity Law Blog
S
Securelist
Google DeepMind News
Google DeepMind News
小众软件
小众软件
T
Threat Research - Cisco Blogs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
L
LangChain Blog

博客园 - PPBoy

状态机的轮子 oracle生成path的sql语句 oracle表空间异常大 springboot2集成activiti出错 策略模式2 策略模式1 sql从n月到m月数据汇总,没有数据,当月显示0 jsp下拉列表 dao层取值用List<map<String,Object>>接收有序map 在线预览pdf springboot打jar包,调用webservice出错 导出到word ueditor后台配置项返回格式出错,上传功能将不能正常使用 js控制全屏及退出全屏 springboot2.0jar包启动异常 第九篇: 高可用的服务注册中心 第八篇: 服务链路追踪(Spring Cloud Sleuth) 第七篇: 消息总线(Spring Cloud Bus) 第六篇: 分布式配置中心(Spring Cloud Config)
js控制多层单选,多选按钮,做隐藏操作
PPBoy · 2019-03-04 · via 博客园 - PPBoy

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

//置灰方式
//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);
                            }
                        }
                    }
                }
            });
        }
    }
};

View Code

调用方式:

<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>

View Code

组件根据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>

View Code

欢迎大家加我qq:309620263探讨技术问题。