[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); } } } } });
相关文章推荐
- jsp与jsp页面传值数值。
- JavaScript中__proto__与prototype的关系
- 浅谈javascript函数劫持
- javascript必知必会之prototype
- JavaScript--fullPage.js插件
- 关于JSONArray的用法示例
- js获取屏幕高度,宽度,滚动距离属性总结
- ExtJs开发教程_001_Ext.data.Store使用方法详解
- Animy.js,自己编写的功能丰富的html动画库
- js DOM节点
- 使用js做出弹窗效果
- js 倒计时
- javaScript实现选中文字提示新浪微博分享的效果
- Js获取当前日期时间及其它操作
- JFinal中前台用Ajax实现表单提交,后台用renderJson传数据(二)
- JavaScript编写连连看
- DataTable转换JSON
- 七牛的管理接口不支持js端发送请求进行管理(设计到跨域问题)
- 使用JSch远程部署flume采集点
- javascript获取页面路径中的参数