ext-2.0扩展多选下拉框(代码及演示)

var auto_field=new Ext.form.MultiSelectField();
if(contextlist==null)
{
    auto_field.contextArray=
    [
      ['1','一'],
      ['2','二'],
      ['3','三']
    ]
}
else
{
    auto_field.contextArray=contextlist;
}
auto_field.fieldLabel=text; 
auto_field.id=id;
auto_field.name=id; 
return auto_field;

代码如下:

Ext.form.MultiSelectField = Ext.extend(Ext.form.TriggerField,  {   
    readOnly : true ,   
    defaultAutoCreate : {tag: "input", type: "text", size: "24", autocomplete: "off"},   
    displayField : 'text',  
    contextArray: undefined, //必须满足每行至少两列,第一、二列分别为[value,text]
    valueField : undefined,   
    hiddenName : undefined,   
    listWidth : undefined,   
    minListWidth : 50,   
    layerHeight : undefined,   
    minLayerHeight : 60,   
    value : undefined,   
    baseParams : {},   
    checkpanel:undefined, 
    initComponent : function()
    {   
            Ext.form.MultiSelectField.superclass.initComponent.call(this);   
            this.addEvents
            (   
                    'select',   
                    'expand',   
                    'collapse',   
                    'beforeselect'        
            );   
            if(this.transform)
            {   
                this.allowDomMove = false;   
                var s = Ext.getDom(this.transform);   
                if(!this.hiddenName)
                {   
                    this.hiddenName = s.name;   
                }   
                s.name = Ext.id();    
                if(!this.lazyRender)
                {   
                    this.target = true;   
                    this.el = Ext.DomHelper.insertBefore(s, this.autoCreate || this.defaultAutoCreate);   
                    Ext.removeNode(s);    
                    this.render(this.el.parentNode);   
                }else{   
                    Ext.removeNode(s);    
                }   
            }   
    },   
    onRender : function(ct, position)
    {   
        Ext.form.MultiSelectField.superclass.onRender.call(this, ct, position);   
        if(this.hiddenName)
        {   
            this.hiddenField = this.el.insertSibling({tag:'input', type:'hidden', name: this.hiddenName, id: (this.hiddenId||this.hiddenName)},   
                    'before', true);   
            this.hiddenField.value =   
                this.hiddenValue !== undefined ? this.hiddenValue :   
                this.value !== undefined ? this.value : '';   
            this.el.dom.removeAttribute('name');   
        }   
        if(Ext.isGecko){   
            this.el.dom.setAttribute('autocomplete', 'off');   
        }   
        this.initList();   
    },   
    initList : function()
    {   
        if(!this.list)
        {   
            var cls = 'x-multiselectfield-list';   
            this.list = new Ext.Layer
            ({   
                shadow: this.shadow, cls: [cls, this.listClass].join(' '), constrain:false   
            });   
            var lw = this.listWidth || Math.max(this.wrap.getWidth(), this.minListWidth);   
            this.list.setWidth(lw);   
            this.list.swallowEvent('mousewheel');   
            this.innerList = this.list.createChild({cls:cls+'-inner'});   
            this.innerList.setWidth(lw - this.list.getFrameWidth('lr'));   
            this.innerList.setHeight(this.layerHeight || this.minLayerHeight);   
            if(!this.checkpanel)
            {   
                this.checkpanel = this.CheckPanel(this.innerList);       
            }   
            this.checkpanel.render();   
        }   
    },   
    onSelect:function(id,text,checked)
    {   
            this.setValue(id,text,checked);   
    },   
    CheckPanel:function(el)
    {   
        var checkpanel = new Ext.Panel
        ({   
            el:el,   
            autoScroll:true 
        });  
        var multiselectField = this; 
        if(typeof this.contextArray != 'undefined')
        {
            for(var i=0;i            {
                var contArry=this.contextArray[i];
                var auto_field=new Ext.form.Checkbox
                ({
                    boxLabel:contArry[1],
                    id:contArry[0],
                    name:contArry[0],
                    cls :'x-multiselectfield-list'
                }); 
                auto_field.on('check',function(auto_field)
                {   
                    multiselectField.onSelect(auto_field.id,auto_field.boxLabel,auto_field.checked);
                });   
                checkpanel.add(auto_field);           
            }
        }
        return checkpanel
    },   
    getValue : function()
    {   
        if(typeof this.value != 'undefined')
        {   
            return this.value;   
        }
        else
        {   
            return Ext.form.MultiSelectField.superclass.getValue.call(this);   
        }   
    },   
    setValue : function(id,text,ischecked)
    {   
        var text = text;   
        var value = id;  
        var return_text_string;
        var return_value_string;

        var text_temp    = Ext.form.MultiSelectField.superclass.getValue.call(this);  
        var ids_temp     = typeof this.value != 'undefined' ? this.value : '';
        var text_arrtemp = text_temp.split(",");
        var ID_arrtemp   = ids_temp.split(",");
        if(ischecked)
        {      
            Array.add(text_arrtemp,text);
            Array.add(ID_arrtemp,value);
        }
        else
        {
            Array.remove(text_arrtemp,text);
            Array.remove(ID_arrtemp,value);       
        }
        return_text_string  = text_arrtemp.toString();
        return_value_string = ID_arrtemp.toString();
        var first_text_str  = return_text_string.substr(0,1);
        var first_value_str = return_value_string.substr(0,1);
        if(first_text_str==",")
        {
          return_text_string=return_text_string.substr(1);
        }
        if(first_value_str==",")
        {
          return_value_string=return_value_string.substr(1);
        }
        Ext.form.MultiSelectField.superclass.setValue.call(this, return_text_string);   
        this.value = return_value_string; 
        if(this.hiddenField)
        {   
            this.hiddenField.value = return_value_string;   
        }  

    },     
    onDestroy : function()
    {   
        if(this.list)
        {   
            this.list.destroy();   
        }   
        Ext.form.MultiSelectField.superclass.onDestroy.call(this);   
    },   
    collapseIf : function(e)
    {   
        if(!e.within(this.wrap) && !e.within(this.list))
        {   
            this.collapse();   
        }   
    },   
    expand : function()
    {   
        if(this.isExpanded() || !this.hasFocus)
        {   
            return;   
        }   
        this.list.alignTo(this.wrap, this.listAlign);   
        this.list.show();   
        Ext.getDoc().on('mousewheel', this.collapseIf, this);   
        Ext.getDoc().on('mousedown', this.collapseIf, this);   
        this.fireEvent('expand', this);   
    },   
    collapse : function()
    {   
        if(!this.isExpanded())
        {   
            return;   
        }   
        this.list.hide();   
        Ext.getDoc().un('mousewheel', this.collapseIf, this);   
        Ext.getDoc().un('mousedown', this.collapseIf, this);   
        this.fireEvent('collapse', this);   
    },   
    isExpanded : function()
    {   
        return this.list && this.list.isVisible();   
    },   
    onTriggerClick : function()
    {   
        if(this.disabled)
        {   
            return;   
        }   
        if(this.isExpanded())
        {   
            this.collapse();   
        }
        else 
        {   
            this.onFocus({});   
            this.expand();   
        }   
        this.el.focus();   
    }   
});   
Ext.reg('multiselectfield', Ext.form.MultiSelectField);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
xm-select 是一个基于 layui 的下拉框组件,可以实现多选、搜索、异步加载等功能。下面是一个简单的示例代码: ```html <div class="layui-form-item"> <label class="layui-form-label">多选下拉框</label> <div class="layui-input-block"> <select xm-select="demo2" xm-select-max="3" xm-select-search xm-select-skin="default" name="city[]" lay-verify="required" multiple> <option value="0">北京</option> <option value="1">上海</option> <option value="2">广州</option> <option value="3">深圳</option> <option value="4">杭州</option> <option value="5">南京</option> <option value="6">武汉</option> <option value="7">成都</option> </select> </div> </div> ``` 其,`xm-select` 属性指定了下拉框的 ID,`xm-select-max` 属性指定了最多可选项数,`xm-select-search` 属性表示开启搜索功能,`xm-select-skin` 属性指定了皮肤样式,`multiple` 属性表示开启多选。 在 JavaScript ,我们需要使用 `xmSelect` 函数初始化下拉框,并设置各种配置项: ```javascript layui.use(['xmSelect'], function(){ var xmSelect = layui.xmSelect; var demo2 = xmSelect.render({ el: '#demo2', name: 'city', layVerify: 'required', filterable: true, searchPlaceholder: '请选择城市', tips: '最多选择3个城市', max: 3, data: [{ name: '北京', value: 0 }, { name: '上海', value: 1 }, { name: '广州', value: 2 }, { name: '深圳', value: 3 }, { name: '杭州', value: 4 }, { name: '南京', value: 5 }, { name: '武汉', value: 6 }, { name: '成都', value: 7 }] }); }); ``` 其,`el` 属性指定了下拉框的 ID,`name` 属性指定了提交表单时的参数名,`layVerify` 属性指定了表单验证规则,`filterable` 属性表示开启搜索功能,`searchPlaceholder` 属性指定了搜索框的提示文本,`tips` 属性指定了超出可选项数时的提示文本,`max` 属性指定了最多可选项数,`data` 属性指定了下拉框的选项数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值