预览:

调用方法:

<INPUT TYPE="" NAME="" id='multiselect'>
<script>
Ext.onReady(function() {

    var arr = [['1', '项一'], ['2', '项二'], ['3', '项三'],['4', '项四'],['5', '项五']];
    var arr2 = [['1', '项一'], ['2', '项二']];


    var auto_field = new Ext.form.MultiSelectField({
        applyTo:'multiselect',  
        hiddenName:'hid',  //Ext.get('hid').getValue() 可以得到索引号ID数组
        contextArray : arr,
        fieldLabel : 'adfadsf',
        id : 'test',
        defaltValueArray:arr2,
        name : 'test'
    });

});
</script>

EXT扩展组件:

Ext.form.MultiSelectField = Ext.extend(Ext.form.TriggerField, {
    readOnly : true,
    defaultAutoCreate : {
        tag : "input",
        type : "text",
        size : "24",
        autocomplete : "off"
    },
    displayField : 'text',
    contextArray : undefined, 
    valueField : undefined,
    hiddenName : undefined,
    listWidth : undefined,
    minListWidth : 50,
    defaltValueArray:undefined,
    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 < this.contextArray.length; 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);
                });

                if(typeof this.defaltValueArray != 'undefined'){
                    for (var j = 0; j < this.defaltValueArray.length; j++) {
                        var defvalArry =  this.defaltValueArray[j];

                        if(defvalArry[0]==contArry[0]){
                            auto_field.checked=true;
                        }
                    }
                }

                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)   
        {         
           text_arrtemp.push(text); 
            ID_arrtemp.push(value);
        }   
        else  
        {   
            text_arrtemp.remove(text);
            ID_arrtemp.remove(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);
Array.prototype.remove=function(str)
{
    var tmp=this;
    for(i=0;i<tmp.length;i++)
    {
        if(tmp[i].toString()==str){
            tmp.splice(i,1);
            break;
        }
    }

转载于:https://www.cnblogs.com/meetrice/archive/2008/05/24/1206339.html

EXT2.0 多选下拉框相关推荐

  1. Angular实现虚拟滚动多选下拉框笔记

    要求: 实现一个angular多选下拉框组件,当有超过2000个选项时,滑动/挑选/全选均不卡. 正篇: 为了方便,这里不考虑扩展性,所以规定下拉框展开只显示7行数据,行高27px 约定:input为 ...

  2. html css 多选下拉框,jQuery多选下拉框插件

    jquery.multi-select.js是一款jQuery多选下拉框插件.该插件可以将select元素转换为带checkbox的多选下拉框,非常实用. 使用方法 在页面中引入下面的文件. lt;l ...

  3. HTML多选mysql,html多选下拉框 | 学步园

    一个jquery ui,实现html的多选下拉框,在下拉里面加checkbox,不改变页面的提交特性,只是动态的改变select选中的多选数据. jsp页面例子: pageEncoding=" ...

  4. jquery easyui 多选下拉框的实现

    为什么80%的码农都做不了架构师?>>>    jquery easyui 多选下拉框的实现 修改官方提供的demo实例,本来是单选的,让她编程多选,完成了勾选和去勾选的所有功能. ...

  5. bootstrap-multiselect.js多选下拉框初始化时默认选中初始值

    bootstrap-multiselect.js多选下拉框默认值设置 一.案例数据格式  二.HTML代码 <select id="msgRoles" multiple=&q ...

  6. 【js】复选框,复选下拉框,文本框勾连

    [js]对常见事件的一个总结 ps: 内容涉及(kendo Ui, jQuery) 如下图所示:要求实现功能点 (1)用户名(复选下拉框,可选择多个)和用户名(文本输入框)相勾连 复选下拉框改变,文本 ...

  7. Qt实现复选下拉框 C++

    文章目录 一.QListWidget+QListWidgetItem 二.activate(int) 总结 一.QListWidget+QListWidgetItem 实现QComboBox下拉框复选 ...

  8. php表单多选内容取出,php处理单名多值表单的方法(多选下拉框)

    php处理单名多值表单的方法(多选下拉框) 发布于 2014-11-15 09:33:40 | 911 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hyperte ...

  9. antd select多选_antd多选下拉框一行展示的实现方式

    我们都知道antd的select多选时,如果下拉框宽度不足,则自动浮动到下一行将下拉框撑大,但是这回影响到页面的整体布局. 我们期望的效果是,下拉框只显示一行的值,超出一行的部分自动隐藏. 下面有2种 ...

  10. jquery --- 多选下拉框的移动(穿梭框)

    效果如下: 几个注意地方: 1.多选下拉框需要添加 multiple 2.获取选中的元素KaTeX parse error: Expected 'EOF', got '#' at position 3 ...

最新文章

  1. LVM---基本创建和使用
  2. 前端性能优化-图像优化
  3. 原型 - 实现自己的jQuery
  4. 欧姆字符的编码c语言,《编码:隐匿在计算机软硬件背后的语言》读书笔记
  5. springboot jar包部署_Spring Boot项目基于Jar部署和打包详解教程
  6. Web上的支持的图片格式以及它们之间的区别
  7. dgl._ffi.base.DGLError: Cannot assign node feature “n_feat“ on device cuda:0 to a graph on device
  8. CANape 20拍了拍你,更新速递请查收~
  9. python list 迭代_python迭代、列表生成式
  10. SQL(Oracle) 日期转换为英文年月格式
  11. 示波器1m和50欧姆示阻抗匹配_示波器的阻抗选择
  12. 计算机专业 考研VS工作
  13. web安全基础之HTTP
  14. Unix File Permissions ACLs in OS X(part 2)
  15. 案例爬取(其一):url获取
  16. 站长号文库:什么是云存储?
  17. HBase的数据热点和Hbase常见避免热点问题的方法
  18. leetcode练习一:数组(二分查找、双指针、滑动窗口)
  19. 解决Chrome无法加载Shockwave Flash
  20. vivado生成mig_ddr3调试经验分享(一)——modelsim实现对vivado中的MIG ddr3的仿真

热门文章

  1. CSS设置中文字体无效乱码问题
  2. Python+Appium+夜神模拟器安装与简单运行(1/2)
  3. 算法的时间复杂度和空间复杂度(java)
  4. 在mysql中字符串的操作_mysql中的字符串操作.doc
  5. 哪吒之魔童降世视听语言影评_《哪吒之魔童降世》影评:生而孤独,从不认命...
  6. codesys编程_明晚20:00,CODESYS教您制作可编程控制器
  7. raid5用户mbr还是gpt_系统硬盘gpt转换的操作方法
  8. 树形动态规划 java_树形动态规划
  9. 浏览器中的 HTTP 请求从发起到结束经历的所有阶段
  10. vscode:设置语言为中文