[EXTJS]combo下拉框可多选

4 篇文章 0 订阅
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);
										}
									}
						
								}
							}
						});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值