A. EXTjs的combo组件的下拉选项框的高度和垂直滚动条如何设置
设置combo的一个属性:
maxHeight:100,//下拉列表的最大高度像素值
B. Extjs怎么实现下拉框多选
|1、扩展js类库,在项目中建立一个 js文件,命名为:xxx.js 其代码为
if('function'!==typeofRegExp.escape)
{
RegExp.escape=function(s)
{
if('string'!==typeofs)
{
returns;
}
returns.replace(/([.*+?^=!:${}()|[]/\])/g,'\$1');
};
}
Ext.ns('Ext.form');
Ext.form.MultiSelect=Ext.extend(Ext.form.ComboBox,
{
checkField:'checked',
multi:true,
separator:',',
initComponent:function()
{
if(!this.tpl)
{
this.tpl='<tplfor=".">'+'<divclass="x-combo-list-item">'
+'<imgsrc="'+Ext.BLANK_IMAGE_URL+'"'
+'class="ux-MultiSelect-iconux-MultiSelect-icon-'
+'{[values.'+this.checkField+'?"checked":"unchecked"'
+']}">'
+'{[values.'+this.displayField+']}'
+'</div>'
+'</tpl>';
}
Ext.form.MultiSelect.superclass.initComponent.apply(this,arguments);
this.on(
{
scope:this,
beforequery:this.onBeforeQuery,
blur:this.onRealBlur
});
this.onLoad=this.onLoad.createSequence(function()
{
if(this.el)
{
varv=this.el.dom.value;
this.el.dom.value='';
this.el.dom.value=v;
}
});
},
initEvents:function()
{
Ext.form.MultiSelect.superclass.initEvents.apply(this,arguments);
this.keyNav.tab=false;
},
beforeBlur:function()
{
},
postBlur:function()
{
},
clearValue:function()
{
this.value='';
this.setRawValue(this.value);
this.store.clearFilter();
this.store.each(function(r)
{
r.set(this.checkField,false);
},this);
if(this.hiddenField)
{
this.hiddenField.value='';
}
this.applyEmptyText();
},
getCheckedDisplay:function()
{
varre=newRegExp(this.separator,"g");
returnthis.getCheckedValue(this.displayField).replace(re,this.separator+'');
},
getCheckedValue:function(field)
{
field=field||this.valueField;
varc=[];
varsnapshot=this.store.snapshot||this.store.data;
snapshot.each(function(r)
{
if(r.get(this.checkField))
{
c.push(r.get(field));
}
},this);
returnc.join(this.separator);
},
onBeforeQuery:function(qe)
{
qe.query=qe.query.replace(newRegExp(RegExp.escape(this.getCheckedDisplay())+'['+this.separator+']*'),'');
},
onRealBlur:function()
{
this.list.hide();
varrv=this.getRawValue();
varrva=rv.split(newRegExp(RegExp.escape(this.separator)+'*'));
varva=[];
varsnapshot=this.store.snapshot||this.store.data;
Ext.each(rva,function(v)
{
snapshot.each(function(r)
{
if(v===r.get(this.displayField))
{
va.push(r.get(this.valueField));
}
},this);
},this);
this.setValue(va.join(this.separator));
this.store.clearFilter();
},
onSelect:function(record,index)
{
if(this.fireEvent('beforeselect',this,record,index)!==false)
{
record.set(this.checkField,!record.get(this.checkField));
if(this.store.isFiltered())
{
this.doQuery(this.allQuery);
}
if(this.multi)
{
if(record.get("key")=="---"&&record.get(this.checkField))
{
this.setValue("---");
}
else
{
this.setValue(this.getCheckedValue());
}
}
else
{
this.clearValue();
this.value=record.get(this.valueField);
this.setRawValue(record.get(this.displayField));
this.list.hide();
}
this.fireEvent('select',this,record,index);
}
},
setValue:function(v)
{
if(v)
{
v=''+v;
if(this.valueField)
{
this.store.clearFilter();
this.store.each(function(r)
{
varchecked=!(!v.match('(^|'+this.separator+')'
+RegExp.escape(r.get(this.valueField))
+'('+this.separator+'|$)'));
r.set(this.checkField,checked);
},this);
this.value=this.getCheckedValue();
this.setRawValue(this.getCheckedDisplay());
if(this.hiddenField)
{
this.hiddenField.value=this.value;
}
}
else
{
this.value=v;
this.setRawValue(v);
if(this.hiddenField)
{
this.hiddenField.value=v;
}
}
if(this.el)
{
this.el.removeClass(this.emptyClass);
}
}
else
{
this.clearValue();
}
},
selectAll:function()
{
this.store.each(function(record)
{
record.set(this.checkField,true);
},this);
this.doQuery(this.allQuery);
this.setValue(this.getCheckedValue());
},
deselectAll:function()
{
this.clearValue();
}
});
Ext.reg('multiSelect',Ext.form.MultiSelect);
2、在ext-all.css文件最后,加入css样式
.ux-MultiSelect-icon{width:16px;height:16px;float:left;background-position:-1px-1px!important;background-repeat:no-repeat!important;}
.ux-MultiSelect-icon-checked{background:transparenturl(../images/default/menu/checked.gif);}
.ux-MultiSelect-icon-unchecked{background:transparenturl(../images/default/menu/unchecked.gif);}
3、使用
varDepartUserStore=newExt.data.Store(
{
proxy:newExt.data.HttpProxy(
{
url:'/Web/Manage/DeskTop/JSON/ScheleManager/GetSimpleDepartUserInfo.aspx'
}),
//读取Json
reader:newExt.data.JsonReader(
{totalProperty:"totalCount",root:"root"},
[
{name:'UserId',type:'int'},
{name:'UserName',type:'string'}
])
});
varDepartUserCbox=newExt.form.MultiSelect(
{
fieldLabel:'姓名',
labelStyle:'width:80px',
width:150,
editable:false,
id:'DepartUserDS',
hiddenName:'DepartUserIdDS',
store:DepartUserStore,
emptyText:'--请选择--',
allowBlank:false,
blankText:'请选择',
mode:'remote',
displayField:'UserName',
valueField:'UserId',
triggerAction:'all',
selectOnFocus:true,
listWidth:200
});
DepartUserStore.on('load',function()
{
DepartUserCbox.selectAll();//全选
});
DepartUserStore.load();
C. extjs中下拉框的内容实现有条件选择,对应的情况下可以选择一些对应的选项
参考代码如下:
{ header: '单位名称', dataIndex: 'unitname',
field:
{ xtype: 'combo',
editable: false,
emptyText: "请选择...",
valueField: "id",
displayField: "text",
mode: 'local',
store: storeddl
}
}
var storeddl = Ext.create('Ext.data.Store', {
proxy: {
type: 'ajax',
url: "../../Handler/SystemHandler/UnitHandler.ashx?Lx=ddl"
},
root: 'items',
forceSelection: true,
// lazyRender: true,
fields: ['id', 'text'],
listeners:
{
select: selectRow,
focus: eventFocus
}
});
D. extjs 给下拉框设置数据源问题
异步加载导致。
你在没有加alert()前,数据源尚未加载完成,你就进行赋值了。内所以只会显容示key,而不会是value。
你的alert(),是赋值延后了,数据已经加载完成,所以可以了。
解决思路:你要在数据源加载完成后在进行赋值。——用回调函数callback吧
我的代码(可能麻烦,不过你这个情况我这样解决):
以下代码加在你创建settleTempStore后。
settleTempStore.on('load',function(){Ext.getCmp('openStlnod').setValue(Ext.getCmp('openStlnod').getValue())});
可能标点会不会不匹配,直接打没校验过,你直接调整下。
E. extjs下拉列表选择框combobox,数据源重新加载后如何设置默认选中的项
我建议你在url 中增加部分参数,js存储选中ids,并传递默认选中的数据,后台根据 选中状况以及关键字排序,在代码中根据传递的选中值,进行属性修改.
F. 用网上的方法写 extjs联动下拉框 但是我的不加载数据
java">很简单的一个问题,下拉框联动,只需在选择上一个下拉框的时候,加一个事件,这个事件里面加载下一个下拉框,即可达到联动效果
G. extjs 怎么获取下拉框中选中值所对应的ID
首先获取下拉框的值Ext.getCmp("q_jg").getValue(),这步应该没问题吧
然后,调用以下方法,进行替换兆搏没。银悔我这是性别的例子,楼主对照这改改就好
function gridUserType(value) {
var inx = sexStore.getCount();
for ( var i = 0; i < inx; i++) {
var rec = sexStore.getAt(i);
if (rec.get("id"族纳) == value) {
return rec.get("name");
}
}
}
H. Extjs的EditGridPanel,其中有一列是下拉框,下拉框选择后,后边列级联显示。
editor:{
xtype:combobox',
id:'date',
editable:false,//设置能否编辑
listeners:{
change:function(){
alert(Ext.getCmp('date').getValue());
}
}
}
上面有黑原点的部分是你需要明白的
大致思路我可以给你说下:
你监听你的下拉框获得你选择用户的ID后用Ext.ajax.request()异步于服务器端请求数据获得数据后你在赋值给后面三个你需要显示的文本框就行了
怕你对Ext.ajax.request()不熟悉附上示例代码以供参考
Ext.ajax.request({
url:,//根据用户ID查询数据的后台地址
method:'POST',
sync:true,
callback:function(options,success,response){
varresult=Ext.decode(response.responseText);//把返回值赋给result
//用result取你后面三个文本框需要的值我想不用说下去你也该知道怎么写了吧
}
})
I. extjs combo下拉列表组件的监听事件中设置联动下拉列表disabled属性为false 页面没反映
ext其内部源码有这么一句话 this.el.dom.disabled = true;
disabled 的属性 当submit提交时 不会提交后台
disabled 在IE8以上中有个版bug,一般人很少权遇到过:
<select id="select"><option>asdaasd</option></select>
document.getElementById("select").disabled = "disabled";
document.getElementById("select").disabled = true;
如果disabled 被设置了disabled之后,你再设置为true的时候是无效的,必须设置为disabled = “”才会有效果
你可以试下citytemp.setDisabled("disabled");
实在不行就直接用dom元素去改,直接找到 document.getElementById("select").disabled = "disabled"就可以了
J. extjs 如何获取combox下拉框中选中的值
你的combo的配置就有些不对
displayField这里的参数是对应的下拉框实际值
valueField这里的参数是对应的下拉框显示值
他们应该对应的是json的键值
也就是说displayField再怎么也应该填'name'而不是'datatypename'吧
至于如何获取这些值combo有对应方法
//获取comboxID值
varv=dataNameCombo.getValue();
//获取显示值
vart=dataNameCombo.getRawValue();