您的位置:首页 > Web前端 > JavaScript

[EXTJS]combo下拉框可多选

2015-06-08 15:08 531 查看
combo下拉出一个grid,grid可多选。则可实现combo的多选。
<span style="color:#ff6666;">注:写代码过程中出现过一个bug,后找了好久才发现combo的id和hiddenName不能相同。</span>
var srzd_combo = new Ext.form.ComboBox({
hideOnSelect : false,
loadingText : '加载数据...',
fieldLabel : '<font color=red>*输入参数</font>',
grid : Object(),
id:'@FZDZJ@_'+zfid,
SFDX:true,
hiddenName :'@FZDZJW@_'+zfid,
displayField : 'label',
valueField : 'name',
triggerAction : 'all',
editable : false,
resizable : false,
enableKeyEvents : true ,
onSelect : Ext.emptyFn,
start:true,
selectedClass : '',
mode : 'local',
readOnly : true,
arr : [],
store:new Ext.data.SimpleStore({
fields:['label','name'],
data:srlm_data
}),
tpl : '<div id="cxtj_combo_gridTpl'+zfid+'" style="height:200"></div>',
listeners:{
collapse : function (combo){
var grid = Ext.getCmp('cxtj_combo_grid'+zfid);
var select = grid.getSelectionModel().getSelections();
var ids = [];
var val_arr = [];
for(var i=0;i<select.length;i++){
var v = select[i].get('label');
var val = select[i].get('name');
if(v!=''){
ids.push(v);
val_arr.push(val);
}
}
combo.arr = val_arr;
comboObj['@FZDZJ@_'+zfid]=combo.arr;
//alert('val_arr:'+val_arr.toString()+'---ids:'+ids.toString())
combo.setValue(val_arr.toString());
combo.setRawValue(ids.toString());
var form=fs;
for(var i=0;i<xzzj.length;i++){
xzzj[i].setDisabled(false);
}
xzzj=[];
for(var i=0;i<val_arr.length;i++){
var value = val_arr[i];
var zj1=form.find('name',value)[0];
var zj2=form.find('name',value+'_nyr')[0];
var zj3=form.find('name',value+'_sfm')[0];
var zj4=form.find('hiddenName',value)[0];
var zj5=form.find('name',value+'_xzbm')[0];

if(zj2&&zj3){	//日期类型
xzzj.push(zj2);
xzzj.push(zj3);
}else if(zj4){	//下拉框
xzzj.push(zj4);
}else{
if(zj5){
xzzj.push(zj5);
}
if(zj1){
xzzj.push(zj1);
}
}
}
for(var i=0;i<xzzj.length;i++){
if(xzzj[i]){
xzzj[i].clearInvalid();
xzzj[i].setDisabled(true);
}
}
},
expand : function(combo) {
srlm_data=[];
var sz_value = combo.arr;
for(var i=0;i<fs.items.length;i++){
var item=fs.items.get(i);
var name=item.name;
var hiddenName=item.hiddenName;
for(var m=0;m<sz_value.length;m++){
var value = sz_value[m];
if(value==name||value==hiddenName||value+'_nyr'==name){
srlm_data.push([combo.getRawValue().split(',')[m],value]);
}
}
if(item==combo||item.title=='扩展查询条件'||'要输出的资源'==item.fieldLabel){

}else if(!item.disabled&&item.fieldLabel){
var lable=item.fieldLabel;
lable=lable.substr(lable.indexOf('  ')+12);
if(name==undefined){
name=item.hiddenName;
}else if(name.lastIndexOf('_sfm')==name.length-4){
continue;
}else if(name.lastIndexOf('_nyr')==name.length-4){
name=name.substr(0,name.length-4);
}else{
name=name.replace('_xzbm','');
}
lable=lable+item.labelSeparator;
srlm_data.push([lable,name]);
}
}
if(combo.start){
var sm = new Ext.grid.CheckboxSelectionModel();
var col={header: '全部',
width: 1,
sortable: true ,
dataIndex: 'label'};
combo.grid = new Ext.grid.EditorGridPanel({
id : 'cxtj_combo_grid'+zfid,
sm : sm ,
height : 200,
frame : true,
iconCls : 'icon-grid' ,
viewConfig : { forceFit : true } ,
store : new Ext.data.SimpleStore({
fields:['label','name'],
data:srlm_data
}),
columns : [ sm, col ],
listeners : {
afterlayout : function(combo){

}
}
}).render('cxtj_combo_gridTpl'+zfid);
combo.start=false;
}else{
combo.grid.getStore().loadData(srlm_data);
var grid = Ext.getCmp('cxtj_combo_grid'+zfid);
if(grid){
var ids = combo.getRawValue().split(',');
var rows = [];
for(var i = 0; i < grid.getStore().getCount() ; i++){
var v = grid.getStore().getAt(i);
for(var j=0;j<ids.length;j++){
if(v.get('label') == ids[j]){
rows.push(i);
}
}
}
grid.getSelectionModel().selectRows(rows);
}
}

}
}
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: