`

ext select

阅读更多
为感谢论坛发布
http://blog.csdn.net/edisundong/archive/2008/01/25/2065379.aspx

说明:

感谢飞天色鼠和javaeye论坛的sp2,其实是改了飞天色鼠的代码。sp2给了很大帮助,感谢!

演示效果:



调用代码如下:

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);
  • 大小: 6.1 KB
分享到:
评论

相关推荐

    ext pop select fields

    标题 "ext pop select fields" 暗示我们讨论的是Ext JS库中的一个功能,可能涉及到弹出选择框(popup)和选择字段(select field)。在Ext JS中,这是一个常用的组件模型,用于创建交互式用户界面。这篇博客文章的...

    layui-select-ext.zip

    在本案例中,"layui-select-ext.zip" 提供了一个针对layui的扩展,特别是对于多选下拉框(select)的功能增强。layui-select-ext 是这个扩展的简易版,它可能包含了更易于使用的接口和定制化选项,以满足开发者在...

    ext 下拉树 ext2

    4. `TSelect.js`:这个文件名暗示可能是一个特制的下拉选择器,用于实现下拉树功能。它可能是Ext JS的扩展或者一个独立的JavaScript库。 5. `ssjImg`:这可能是图片资源文件夹,可能包含了与下拉树相关的图标或者...

    Ext->editgrid+combobox

    Ext中的Combobox下来框在EditGrid中的应用。Combobox显示值问题得以解决。

    ext combobox二级联动

    groupCombo.on('select', function() { typeCombo.reset(); typeDS.proxy = new Ext.data.HttpProxy({ url : 'getTypesByUser.action?groupId=' + groupCombo.getValue() }); typeDS.load(); });

    Ext3.1 21款精美主题和动态换皮肤

    Ext动态换皮肤 1、在页面中增加一个放样式文件的地方: ... this.cboTheme.on('select', function(combo) { var value = combo.getValue(); Ext.util.CSS.swapStyleSheet(‘theme’, value); }, this); 3、完成。

    Ext2.2开发指南--完整翻写Ext官方网站学习指南介绍

    3. 如果看到全中文的响应页面,说明工程运行正常,参见ExtStart.js文档,有非常详细的注释说明Ext.Element类与Ext.select()选择器的使用,以及事件处理的几种使用情况,最后是Ext框架使用Ajax技术的演示部分,需要...

    ext 颜色改变组件

    EXT是Sencha公司开发的一个基于JavaScript的开源框架,主要用于构建富客户端Web应用程序。EXT Color Change Component,即EXT颜色改变组件,是EXT库中一个用于处理颜色选择和展示的UI组件,它提供了用户友好的界面,...

    EXT3.2 多选下拉框

    多选下拉框在EXT JS中通常通过`Ext.form.CheckboxGroup`或`Ext.form.RadioGroup`类来实现,但在EXT3.2中,实现多选下拉框功能通常会使用`Ext.form.FieldSet`或`Ext.form.ComboBox`的自定义扩展。这类组件提供了复选...

    Ext2.0 中文文档

    例如,EXT提供了一种简便的方式获取多个DOM节点,可以使用Ext.select()方法一次性选取多个匹配的元素。 响应事件是EXT中的重要特性,它通过添加事件监听器实现。EXT支持标准的DOM事件,同时也定义了一些自定义事件...

    ext 日期时间控件

    2. **事件处理**:你可以监听用户的操作,例如`select`事件在用户选择日期时间后触发,可以用来处理选定后的逻辑。 3. **验证**:EXT支持表单验证,DateTimeField可以设置`allowBlank`来控制是否允许为空,`...

    Ext4.0使用指南

    var allParagraphs = Ext.select('p'); // 获取所有段落 ``` EXT4.0还涉及了许多其他重要概念,如组件(Components)、布局(Layouts)、数据绑定(Data Binding)以及Store和Model等。EXTJS4.0的API文档是深入...

    ext里可以选择年月日时分秒的控件

    在EXT(Ext JS)这个强大的JavaScript框架中,时间控件是一种常见的组件,用于用户界面中进行日期和时间的选择。EXT提供了多种这样的控件,其中一种是能够选择年、月、日、时、分、秒的高级时间选择器。标题中的"ext...

    Ext4.0教程

    - 使用`Ext.get`和`Ext.select`方法可以高效地操作页面上的元素,例如高亮显示、修改样式或绑定事件处理程序。 - `ps.each(function(el) { el.highlight(); })`展示了如何遍历由`select`方法返回的元素集合,对每个...

    Ext_MessageBox

    Ext.MessageBox.confirm("sure", "please click button as you select:", function(but) { Ext.MessageBox.alert("message", "you select: " + but); }); ``` 在这个例子中,我们创建了一个带有标题“sure”的确认...

    Ext2.2 中文手册

    - **获取 DOM 节点**:通过 `Ext.get` 或 `Ext.select` 方法可以轻松获取页面中的 DOM 元素。 - **响应事件**:使用 `addListener` 方法为元素绑定事件处理器,例如点击事件。 - **使用 Widgets**:Ext 提供了多种...

    4.0Ext 本地化

    select: function(combo, record) { // 更新本地化设置 updateLocalization(record.get('abbreviation')); } } }); // 创建并显示语言选择组件 Ext.get('languages').appendChild(languageComboBox.render...

Global site tag (gtag.js) - Google Analytics