需求具体描述
很多同学在做Extjs4.2下拉选择表单的时候都有一个疑问,如果我们不选择此下拉选择表单的时候,提交会自动传参数为空给后台,一旦我们选择了之后,combox就有值了,而且还无法置空,这是插件本身的样子!
假如现在有一个需求,需要我们既可以选择某个下拉数据,也可以置空怎么办,在这里我提供一种思路,如果有其他更好的方法,望各路大神不吝赐教,下方留言给我,谢谢!
思路
我的思路其实很简单:
1.让下来框可以编辑,即设置属性 editable : true
2.加监听,判断combox的value是否为空,如果为空,证明这是手动输入的数据,这时候不管用户输入的其他任何的数据是什么,强制reset()操作,注:如果是下拉选择框本身已有的数据,combox的value是不为空的。
3.监听此下拉选择框的失去焦点时的事件,即:blur
具体代码
Extjs的表单定义创建那些我就不写了,直接上核心代码哦!
{
xtype : 'combo',//引入combox
name : 'name',//映射字段的名称
fieldLabel : '名称',//表单名称
labelAlign: 'right',//对齐方式
allowBlank : true,//是否为空,true表示可以为空
maxLength : 100,//最大长度
width : 285,//表单宽度
displayField : 'value',//下拉选择的时候显示的值
valueField : 'code',//传值给后台时的值,也就是表单的值
editable : true,//这个是此讲的重点,是否可以编辑,默认false,不可以编辑
emptyText : " --请选择名称--",//表单输入提示语
store: 'Users',//下拉框数据来源store
listeners : {//添加监听事件,可以是多个事件,所有加了s
blur : function (data) {//失去焦点事件
var me = this;//作用域
var value =data.value;//获取combox的value
if(value==null){
me.reset();//为空时强制清空数据,然后return
return;
}
}
}
}
其他
方式可能有很多种,有的时候还是得根据自己的需求来定,本文只是提供一种思路!