Ext中的combobox有属性typeAhead:true 可以实现模糊匹配,但是是从开始匹配的,如果需要自定的的匹配,则需要监听beforequery方法,实现自己的匹配查询方法:

var gfxmComb  = new Ext.form.ComboBox({
id : 'gfxmComb',
store : gfxmStore,
typeAhead : true,
mode : 'local',
editable : true,
displayField :'xmMc',
valueField :'xmBm',
triggerAction : 'all',
selectOnFocus : true,
listeners : {
'beforequery':function(e){ var combo = e.combo;
if(!e.forceAll){
var input = e.query;
// 检索的正则
var regExp = new RegExp(".*" + input + ".*");
// 执行检索
combo.store.filterBy(function(record,id){
// 得到每个record的项目名称值
var text = record.get(combo.displayField);
return regExp.test(text);
});
combo.expand();
return false;
}
}
}
});

代码:

var employee_store = new Ext.data.Store({
proxy:new Ext.data.HttpProxy({url:"../Process/Form_cli_e.ashx"}),
reader: new Ext.data.JsonReader({
//remote:true,
totalProperty:'totalProperty',
root:'root',
id:'employee_store'
},[
{name: 'ry_name'},
{name: 'ry_gh'}
])
});
function cli_e(){
var cli_e_box = new Ext.form.ComboBox({
mode:'remote',
idname:'cli_E',
name:'cli_E',
displayField:'ry_name',
valueField:'ry_gh',
store:employee_store,
typeAhead:false,
triggerAction:'query'
});
return cli_e_box;
}

1.使用simplestore正常 
2.使用远程数据,设置triggerAction:'all',正常 
3.使用远程数据,设置triggerAction:'query',读不出数据 
4.使用远程数据,设置triggerAction:'query',在combobox中输入4个字符可加载到数据,但没有筛选功能

combo.js

Ext.ns('Example');

Example.comboConfig = {
xtype:'combo' // we need id to focus this field. See window::defaultButton
,id:'combo' // we want to submit id, not text
,valueField:'persID'
,hiddenName:'persID' // could be undefined as we use custom template
,displayField:'persLastName' // query all records on trigger click
,triggerAction:'all' // minimum characters to start the search
,minChars:2 // do not allow arbitrary values
,forceSelection:true // otherwise we will not receive key events
,enableKeyEvents:true // let's use paging combo
,pageSize:5 // make the drop down list resizable
,resizable:true // we need wider list for paging toolbar
,minListWidth:220 // force user to fill something
,allowBlank:false // store getting items from server
,store:new Ext.data.JsonStore({
id:'persID'
,root:'rows'
,totalProperty:'totalCount'
,fields:[
{name:'persID', type:'int'}
,{name:'persLastName', type:'string'}
,{name:'persFirstName', type:'string'}
]
,url:'process-request.php'
,baseParams:{
cmd:'getData'
,objName:'person2'
,fields:'["persLastName","persFirstName"]'
}
}) // concatenate last and first names
,tpl:'<tpl for="."><div class="x-combo-list-item">{persLastName}, {persFirstName}</div></tpl>' // listeners
,listeners:{
// sets raw value to concatenated last and first names
select:function(combo, record, index) {
this.setRawValue(record.get('persLastName') + ', ' + record.get('persFirstName'));
} // repair raw value after blur
,blur:function() {
var val = this.getRawValue();
this.setRawValue.defer(1, this, [val]);
} // set tooltip and validate
,render:function() {
this.el.set(
{qtip:'Type at least ' + this.minChars + ' characters to search in last name'}
);
this.validate();
} // requery if field is cleared by typing
,keypress:{buffer:100, fn:function() {
if(!this.getRawValue()) {
this.doQuery('', true);
}
}}
} // label
,fieldLabel:'Combo'
}; // main entry point
Ext.onReady(function() {
Ext.QuickTips.init(); // invalid markers to sides
Ext.form.Field.prototype.msgTarget = 'side'; // create and show window
var win = new Ext.Window({
id:'combo-win'
,title:Ext.fly('page-title').dom.innerHTML
,layout:'fit'
,width:300
,height:150
,closable:false
,border:false // let window code to focus the combo on show
,defaultButton:'combo'
,items:{
xtype:'form'
,frame:true
,defaults:{anchor:'-20'}
,items:[{
xtype:'textfield'
,fieldLabel:'Dummy Field'
}
,Example.comboConfig
]
}
}); win.show(); }); // eo onReady

combo.html:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="ext/resources/css/ext-all.css" />
<link id="theme" rel="stylesheet" type="text/css" href="css/empty.css" />
<link rel="stylesheet" type="text/css" href="css/icons.css" />
<link rel="stylesheet" type="text/css" href="css/formloadsubmit.css" />
<link rel="shortcut icon" href="img/extjs.ico" />
<script type="text/javascript" src="ext/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="ext/ext-all-debug.js"></script>
<script type="text/javascript" src="combo.js"></script>
<title id="page-title">Combo with Remote Store by Saki</title>
</head>
<body>
<div class="adsense" style="margin:4px">
<script type="text/javascript"><!--
google_ad_client = "pub-2768521146228687";
/* 728x90, for examples ifram */
google_ad_slot = "5477402227";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div> <!-- delete following line if you don not want stats included -->
<?if("examples.extjs.eu"===$_SERVER["SERVER_NAME"]){$page='combo';include("stats.php");}?>
</body>
</html>

Ext.form.ComboBox级联菜单(mode : 'local[remote]')

var dwStore = new Ext.data.JsonStore({
url:"bdzJbqk.html?m=loaddwdata",
root:"dwresults",
totalProperty:"dwtotalCount",
fields:["id","name"]
});
dwStore.load(); var bdzStore = new Ext.data.JsonStore({
url:"bdzJbqk.html?m=loadbdzdata",
root:"bdzresults",
totalProperty:"dwtotalCount",
fields:["id","name"]
});
var bdzcombo = new Ext.form.ComboBox({
id:'bdz',
width:60,
listWidth:58,
store: bdzStore,
value: "全部",
valueField :"id",
displayField: "name",
forceSelection: true,
editable: false,
triggerAction: 'all',
//mode : 'local',
allowBlank:true
}); var dwcombo = new Ext.form.ComboBox({
width:150,
id:'search',
store: dwStore,
value: '${cdssdw}',
valueField :"id",
displayField: "name",
forceSelection: true,
hiddenName:'test',
editable: false,
triggerAction: 'all',
allowBlank:true,
emptyText:'请选择',
fieldLabel: '多选下拉ComBo',
mode : 'remote',
listeners:{
select :function(dwcombo){
bdzStore.load({params:{cdssdw: dwcombo.getValue()}});
}
}
});

现在我需要在点击dwcombo 下拉框的时候出发bdzcombo 并给它加载数据

我只说我遇到的问题了,关于怎么加载的我就认为大家都会了

我遇到了这样一个问题,当我点击第一级菜单的时候,第二级菜单并没有加载数据

反复试了几次之后我发现,必须先激活第二级的菜单,再点击第一级菜单,这时才能给第二级菜单加载数据

那么第二级菜单真的在加载页面时没有自动激活吗

我去API里看了一下,ComboBox就没有激活自身的方法

细心的朋友会发现这样产生效果是第二级菜单下面事实上是有两个格子

我才意思到我忘记了一个重要的属性,就是“mode”

试了之后,果然解决了这个问题

我设置了mode:'local'

原来是这样的,当我们点击第一级菜单的时候,由于select事件,就已经加载了第二级菜单的数据

那么我们在点击第二级菜单的时候,还用不用去服务器端去数据呢?

当然不用了,因为数据已经取过来了

我们只需要在本地取就可以了

而mode默认的值为remote

Ext ComboBox 动态查询的更多相关文章

  1. 自己写的一个关于Linq to Entity 动态查询的例子

    这两天一直想写一个动态查询的方式,先是晚上查询了一下,发现大家写的差不多都是一样的[如:http://www.cnblogs.com/ASPNET2008/archive/2012/10/28/274 ...

  2. WINFORM 多条件动态查询 通用代码的设计与实现

    经常碰到多条件联合查询的问题,以前的习惯认为很简单总会从头开始设计布局代码,往往一个查询面要费上老半天的功夫,而效果也不咋地.     前段时间做了个相对通用的多条件动态查询面,复用起来还是挺方便的, ...

  3. 基于jpa的specification实现动态查询

    spring data jpa为我们实现简单的crud操作提供了极大的方便.但大部分情况下,系统中都存在大量的动态查询操作,这个时候就可以借助spring data jpa的 Specificatio ...

  4. Thinkphp查询 1.查询方式 2.表达式查询 3.快捷查询 4.区间查询 5.组合查询 6.统计查询 7.动态查询 8.SQL 查询

    1.使用字符串作为条件查询 $user = M('User'); var_dump($user->where('id=1 AND user="蜡笔小新"')->sele ...

  5. 【EasyUI】combotree和combobox模糊查询

    这里说的模糊查询指在输入框输入,然后自动在下拉框中显示匹配结果,类似Google搜索提示 EasyUI库已经实现了combobox的查询过滤功能,但只能从头匹配,原因是EasyUI库的代码限制: fi ...

  6. Winform如何实现ComboBox模糊查询

    最近朋友问了一个关于Winform实现ComboBox模糊查询的知识点,自己好久没有搞Winform了,就上手练了一下,废话不多说,进入正题. 前台设计: 前台就是一个简单的Form窗体+一个Comb ...

  7. Linq 动态查询排序

    Linq的排序一般是这样写的: query.OrderBy(x => x.Tel).Skip().Take(); 实际使用中排序字段可能是通过字符类型的参数来设置的,于是想这样实现: query ...

  8. ibatis动态查询条件

    ibatis的调试相对困难,出错的时候主要依据是log4生成的log文件和出错提示,这方面要能比较熟练的看懂. 下面这个配置基本上包含了最复杂的功能:分页\搜索\排序\缓存\传值Hash表\返回has ...

  9. Linq动态查询简易解决之道(原创)

    因为项目需要使用Linq来查询数据,但是在多条件查询时,需要使用一大堆if(...!=string.empty)等判断条件感觉不是很优雅.网上搜索以下,大概找到了两种办法,一种是老外写的一个类,感觉用 ...

随机推荐

  1. Jenkins+Docker持续集成

    本节内容: Jenkins介绍 安装部署Jenkins Jenkins构建maven风格的job Jenkins邮件通知设置 Sonar Jenkins与Docker结合 一.Jenkins介绍 Je ...

  2. Django实战(19):自定义many-to-many关系,实现Atom订阅

    记得有人跟我说过,rails的has_many :through是一个”亮点“,在Django看来,该功能简直不值一提.rails中的many-to-many关联中,还需要你手工创建关联表(写 mig ...

  3. Android studio代码实现打电话+点击事件四种方式

    Android系统架构(重点) 第一层:应用层Application 第二层:应用框架层Application Framework 第三层:Android底层类库层 Libraries.Dalvik虚 ...

  4. 富文本是在modal框中弹出显示的问题

    记录一下,在用tinymce富文本的时候,由于是用在modal 上的,始终无法获取焦点,后来才发现问题出在tinymce在modal前创建了,所以导致这个问题,解决方案就是用 v-if="v ...

  5. java.lang.ClassNotFoundException: net.sf.ezmorph.Morpher

    java.lang.ClassNotFoundException: net.sf.ezmorph.Morpher 出现以上异常,可能是使用Json缺少ezmorph包: 以下是Json常用的包:ezm ...

  6. MySQL 关于索引那点事

    索引 其实数据库中的数据是按页存放的其实索引也是按页存放的所以本质上索引也占硬盘空间(以最小的消耗,换取最大的利益) 索引是一种有效组合数据的方式!为快速查找到指定记录做铺垫 目的就是快速或者某个记录 ...

  7. python opencv3 图像与原始字节转换

    git: https://github.com/linyi0604/Computer-Vision # coding:utf8 import cv2 import numpy import os &q ...

  8. HTML5前端

    Web前端介绍 angular2html 1.HTML (常用标签 网页的基本结构) 2.CSS (常用样式 网页的显示效果) 3.JavaScript (用户交互效果 动态效果) 4.jQuery ...

  9. android handler messageQueue,looper

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 处理器获取 当前线程中的 循环器对象, 循环器 从 消息队列中 取出 消息, 给 处理器 ...

  10. 【20181031T1】一串数字【分解质因数+贪心】

    题面 [错解] 立方就是所有质因子次数都是3的倍数嘛 发现1e5的三次根很小,可以枚举所有和这个数乘起来是完全立方数的(flag*1) 然后--连条边跑最大独立集? 不对啊是NP问题(实际上是个二分图 ...