• select2插件使用小记2


      这是select2插件使用的第二篇,可参考第一篇 select2插件使用小记。上一篇主要是关于基本的使用,这篇主要是关于多选,及联动的。侧重点不同。

          效果图如下:

      

      遵从W3C标准:结构、样式、行为。以下分别是html、css、js代码。

      html主要代码如下:

      多选:需要设值select元素 - name="name[]" , 及 multiple="multiple"。

    <div class="form-wrap">
            <div class="field-value-list">
                <p class="field-value-list-left"><span class="field-value"><i class="asterisk">*</i>行业选择:</span></p>
                <div class="field-value-list-right">
                    <div class="field-value">
                        <p>
                            <select id="in_f" class="sel2-mul-not-null industry" name="in_f[]" data-next="in_s" multiple="multiple">
                                
                            </select>
                            <span id="in_f_desc" class="check-result info-content-tip form-item-true">&nbsp;</span>
                        </p>
                        <p style="margin-top: 10px;">
                            <select id="in_s" class="sel2-mul-not-null industry" name="in_s[]" data-next="in_t" multiple="multiple">
                                
                            </select>
                            <span id="in_s_desc" class="check-result info-content-tip form-item-true">&nbsp;</span>
                        </p>
                        <p style="margin-top: 10px;">
                            <select id="in_t" class="industry" name="in_t[]" multiple="multiple">
                                
                            </select>
                            <span>非必填</span>
                            <span id="in_t_desc" class="check-result info-content-tip form-item-true">&nbsp;</span>
                        </p>
                    </div>
                </div>
            </div>
        </div>

      渲染模板内容如下:

      备注:使用了jsrender渲染模板,需要引入jsrender.js, 可不使用,使用其他方式。主要功能是循环渲染select的option的内容,减少字符串的拼接。

        <!-- 选择下拉框选项 -->
        <script type="text/x-jsrender" id="tp_sel">
            {{for data}}
                <option value="{{:id}}" title="{{:text}} [{{:id}}]">{{:text}}</option>
            {{/for}}
        </script>

      css主要样式如下:

           /* select2样式重设 */
            .select2-container--default .select2-selection--multiple {
                min-height: 28px;
                background: #f5f5f5;
                border-color: #bbb;
                border-radius: 0;
                line-height: 22px;
            }
            .select2-container--default.select2-container--focus .select2-selection--multiple{
                overflow: auto;
                max-height: 120px;
                background: #fff;
                border-color: #bbb;
            }
            .select2-container--default .select2-search--inline .select2-search__field {
                margin-top: 0;
            }
            .select2-container--default .select2-selection--multiple .select2-selection__choice {
                overflow: hidden;
                margin-top: 4px;
                max-width: 100px;
                height: 20px;
                line-height: 20px;
                text-overflow: ellipsis;
            }
            
            .form-wrap {
                margin: 70px;
            }
            .field-value-list{
                margin-bottom: 10px;
            }
            .field-value-list-left{
                float: left;
                width: 96px;
                height: 30px;
                line-height: 30px;
            }
            .field-value-list-left .field-value{
                display: block;
                font-size: 14px;
                text-align: right;
                color: #333;
            }
            .field-value-list-right{
                margin-left: 86px;
                padding-left: 25px;
                min-height: 30px;
                line-height: 30px;
                text-align: left;
            }
            .field-value-list-right .field-value{
                display: inline-block;
                margin-right: 10px;
                min-height: 30px;
                line-height: 30px;
                vertical-align: top;
                font-size: 12px;
            }
            .field-value-list-right .field-value select {
                padding-left: 4px;
                padding-right:4px;
                width: 320px;
                max-width: 320px;
                height: 28px;
                background-color: #f5f5f5;
                border:1px solid #bbbbbb;
                line-height: 20px;
                font-size: 12px;
                color:#333333;
                vertical-align: top;
            }
            .field-value-list-right .field-value select:focus{
                background-color: #fff;
            }
            .field-value-list-right span.form-item-false{
                color:#e40000;
            }
            .field-value-list-right span.form-item-true{
                display: none;
            }
            .field-value-list-left span i{
                display: inline-block;
                height: 30px;
                width: 20px;
                text-align: center;
                line-height: 30px;
                font-style: normal;
                font-size: 14px;
                color: #ff0000;
            }
            .field-value-list-left span i.asterisk{
                width: 10px;
                font-size: 12px;
                line-height: 30px;
            }

      js主要代码如下:

        <script src="js/jquery.min.js"></script>
        <script src="select2/select2.full.min.js"></script>
        <!-- 模板渲染引擎 -->
        <script src="js/jsrender.js"></script>
        <script>
            var map = {
                "in_f": [
                    {
                        "id": 1,
                        "text": "网络服务",
                        "children": [
                            {
                                "id": 2,
                                "text": "网络服务-资讯",
                                "children": [
                                    {
                                        "id": 3,
                                        "text": "资讯-综合门户"
                                    },
                                    {
                                        "id": 4,
                                        "text": "资讯-汽车"
                                    },
                                    {
                                        "id": 5,
                                        "text": "资讯-房产"
                                    },
                                    {
                                        "id": 6,
                                        "text": "资讯-军事"
                                    }
                                ]
                            },
                            {
                                "id": 11,
                                "text": "网络服务-生活服务",
                                "children": [
                                    
                                ]
                            },
                            {
                                "id": 13,
                                "text": "网络服务-社交",
                                "children": [
                                    {
                                        "id": 14,
                                        "text": "社交-休闲"
                                    },
                                    {
                                        "id": 15,
                                        "text": "社交-婚恋"
                                    },
                                    {
                                        "id": 16,
                                        "text": "社交-商务"
                                    }
                                ]
                            }
                        ]
                    },
                    {
                        "id": 35,
                        "text": "游戏",
                        "children": [
                            {
                                "id": 36,
                                "text": "游戏-客户端",
                                "children": [
                                    
                                ]
                            },
                            {
                                "id": 37,
                                "text": "游戏-网页",
                                "children": [
                                    
                                ]
                            }
                        ]
                    },
                    {
                        "id": 43,
                        "text": "零售",
                        "children": [
                            {
                                "id": 47,
                                "text": "零售-垂直B2C",
                                "children": [
                                    {
                                        "id": 48,
                                        "text": "垂直B2C-数码家电"
                                    },
                                    {
                                        "id": 49,
                                        "text": "垂直B2C-服装鞋帽"
                                    },
                                    {
                                        "id": 50,
                                        "text": "垂直B2C-食品饮料"
                                    },
                                    {
                                        "id": 51,
                                        "text": "垂直B2C-个护化妆"
                                    }
                                ]
                            },
                            {
                                "id": 56,
                                "text": "零售-票务平台",
                                "children": [
                                    
                                ]
                            }
                        ]
                    }
                ],
                "in_s": [
                    
                ],
                "in_t": [
                    
                ]
            };
    
            $(function () {
                /* 多选 联动 */
                var selectMod = {
                    initSelect: function ($target) { // 初始化
                        $target.select2({
                            placeholder: '请选择(可多选)', 
                            language: {
                                noResults: function() {
                                   return "暂无数据"
                                }
                            }
                        });
                    },
                    editInitSelected: function ($target, val) {
                        $target.val(val).trigger('change');
                    },
                    renderNext: function () { // 下拉多选联动
                        var $this = $(this),
                            cur = $this.attr('id'),
                            curVal = $('#'+cur).val(),
                            next = $this.data('next'),
                            $next = $('#'+next),
                            tp = $('#tp_sel'),
                            curArr = map[cur] || [];
                        if (curVal) {
                            if (next && $next.length && curArr.length) {
                                var arr = curArr.filter(function (obj) {
                                    if (curVal.indexOf(obj.id+'') != -1) {
                                        return obj;
                                    }
                                }).map(function (obj) {
                                    if (obj && obj.children && obj.children.length) {
                                        return obj.children;
                                    }
                                });
                                map[next] = [].concat.apply([], arr); // 二维数组转换为一维数组
                                $next.html(tp.render({data:map[next]})).change();
                            }
                        } else {
                            if (next && $next.length) {
                                $next.html(tp.render({data:map[next]})).change();
                            }
                        }
                    }
                };
    
                var industryMod = {
                    event: function () {
                        $('body').on('change', '.industry', selectMod.renderNext);
                    },
                    init: function () {
                        this.event();
                        $('#in_f').html($('#tp_sel').render({data:map.in_f}));
                        selectMod.initSelect($('#in_f, #in_s, #in_t'));
                    },
                    // 假如有回填信息,调用该方法即可
                    editInit: function () {
                        // 回填信息,按照联动顺序,依次赋值
                        var editInfo = {
                            in_f: ['1'],
                            in_s: ['2'],
                            in_t: ['3', '4']
                        };
                        selectMod.editInitSelected($('#in_f'), editInfo.in_f);
                        selectMod.editInitSelected($('#in_s'), editInfo.in_s);
                        selectMod.editInitSelected($('#in_t'), editInfo.in_t);
                    }
                };
                industryMod.init();
            })
        </script>

      

      

  • 相关阅读:
    Django之Admin
    反射功能:***attr
    python单例模式
    三元表达式,推导式,生成器表达式
    jquery的each()
    Django篇之F,Q
    Django的思维导图
    Models_Class 有choice,如何显示其中文
    Java并发机制(1)--线程状态与方法(转)
    Java并发机制(2)--synchronized与Lock
  • 原文地址:https://www.cnblogs.com/EnSnail/p/7885524.html
Copyright © 2020-2023  润新知