为感谢论坛发布
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);
分享到:
相关推荐
在EXT框架中,"多选下拉框"是一种常见的组件,它允许用户在下拉列表中选择多个选项,而不是仅限于单选。 在EXT中实现多选下拉框,主要涉及到EXT的`ComboBox`组件和`multiSelect`配置项。`ComboBox`是一个灵活的输入...
layui的插件效果,优化基础layui的原装组件的效果。 layui 是一款采用自身模块规范...其外在极简,却又不失饱满的内在,体积轻盈,组件丰盈,从核心代码到 API 的每一处细节都经过精心雕琢,非常适合界面的快速开发。
在网页开发中,多选下拉框是一种常见的交互元素,用户可以从中选择多个选项。JavaScript(简称js)作为客户端脚本语言,常被用来增强网页的交互性,其中包括实现多选下拉框的功能。本文将深入探讨如何使用JavaScript...
Layui是一个强大的前端UI框架,它提供了一系列美观且易于使用的组件,包括我们所讨论的多选下拉框。"layui-select-multiple"就是Layui专门为多选下拉框设计的一整套样式和功能。 首先,我们来看“layui多选下拉框...
基于ext3.3的可多选下拉框js,可以从前台或者后台获取下拉框中数据
多选下拉框在EXT JS中通常通过`Ext.form.CheckboxGroup`或`Ext.form.RadioGroup`类来实现,但在EXT3.2中,实现多选下拉框功能通常会使用`Ext.form.FieldSet`或`Ext.form.ComboBox`的自定义扩展。这类组件提供了复选...
**jQuery多选下拉框插件详解** 在Web开发中,多选下拉框是一种常见的交互元素,它允许用户在一组选项中选择多个值。jQuery作为最流行的JavaScript库之一,提供了许多插件来增强这种用户体验。`jquery.multi-select....
本压缩包“各类多选下拉框代码1.zip”可能包含多种实现多选下拉框的代码示例,对于开发者来说,这些代码片段是非常实用的学习和参考资源。 一、多选下拉框的基本原理 多选下拉框通常由HTML的`<select>`标签构建,...
要实现多选下拉框功能,我们需要自定义组件或者使用第三方库来扩展`JComboBox`的功能。 ### 一、自定义多选下拉框 自定义多选下拉框通常涉及以下几个关键步骤: 1. **创建自定义模型**:你需要创建一个自定义的`...
《layui-多选下拉框-xm-select:前端开发中的高效解决方案》 在现代Web开发中,用户界面的交互性和易用性是至关重要的。layui框架以其轻量级、高效和丰富的组件库,成为了众多开发者青睐的选择。尤其在构建多选...
在Bootstrap中实现多选下拉框可以极大提升用户体验,使得用户在有限的空间内可以选择多个选项。以下是如何使用Bootstrap来创建这样一个功能的详细步骤。 首先,确保你已经在你的项目中引入了Bootstrap的相关资源。...
本篇将重点讲解ExtJS中的一个扩展组件——多选下拉框,即“combobox”。 在ExtJS中,ComboBox是一个基本的输入组件,它结合了文本输入框和下拉列表的功能。默认情况下,ComboBox只允许用户选择一个选项。但是,通过...
在Windows Forms(WinForm)开发中,经常需要创建具有多选功能的下拉框控件。这个场景下,我们可以自定义一个控件来实现“CheckBoxList”效果,即用户可以在下拉框中选择多个选项。下面我们将深入探讨如何实现这样一...
本文将深入探讨如何创建一个自定义的多选下拉框控件,以提升用户体验,并利用Ajax技术实现异步更新,提高页面的响应速度。 一、多选下拉框控件的理解 多选下拉框控件是一种允许用户从一系列选项中选择多个值的UI...
《jQuery.multiselect.js:打造高效多选下拉框选择体验》 在Web开发中,下拉框(Dropdown)是常用的一种交互元素,尤其在需要用户从多个选项中进行选择时。然而,传统的HTML `<select>` 标签在处理大量选项或需要...
在"ext多选下拉框(代码及例子)"这个主题中,主要涉及到的知识点有: 1. **EXTJS的Combo组件**:Combo是EXTJS中的一种表单组件,它提供了下拉列表的功能,可以用于输入或者选择数据。它既可以作为单选也可以作为...
1. **多选下拉框基础**: - 在HTML中,`<select>`元素通常用于创建单选的下拉列表,通过设置`<select>`的`multiple`属性,可以使其变为多选模式。例如: ```html <option>Option 1 <option>Option 2 ... `...
在网页开发中,交互式组件是提升用户体验的关键因素之一,其中“js扩展多选下拉框”就是一个典型的实例。这个组件允许用户在一个下拉菜单中选择多个选项,从而提供了更丰富的数据输入方式。本文将详细讲解如何使用...
安装完成后,我们可以通过简单的jQuery代码实现多选下拉框的功能。例如: ```html <option value="value1">Option 1 <option value="value2">Option 2 <option value="value3">Option 3 $(document).ready...
【51CTO下载-下拉多选控件】这个文件很可能是包含该多选下拉框控件的源代码或者可导入的PB组件。下载这个文件后,开发者可以将其导入到自己的PB项目中,然后根据需要进行定制和配置。通常,这样的组件会附带一些说明...