标签:
下拉列表是我们常用的表单元素,能够通过选项的方式代替手动输入,提高输入效率和准确率.但有时侯,如果下拉列表中选项过多,在选择中就会造成不便,降低输入效率.
比如12306火车票订票系统中,发站和到站框中,从下拉列表中选择就非常困难.在日常使用中经常使用输入文字拼音首字母(简拼、音序)的方式进行可选项的过滤,现在我们尝试在Extjs3中使用这种方式,Extjs其他版本可参考.
要通过汉字得到对应的拼音,方式是多种多样的.第一种是在数据库中加字段保存可选项的简拼,这种方式需要操作人员手动维护可选项的简拼,也许不是大家希望的方式.
除此而外就需要在代码中进行翻译,要么在后台代码中,要么在前台页面中.现在提供一种在前台进行处理的方式.可以下载一个javascript写的汉字转拼音的代码小工具.调用其中函数就可以达到需要的目的(可惜对多音字没有太好的办法).
JavaScript文件下载地址:http://files.cnblogs.com/cnscoo/ChinesePY.js
引用chinesePY.js文件,加入项目时注意编码格式,如果乱码了就不能翻译了.下面开始写代码:
var testStore = new Ext.data.Store({ proxy : new Ext.data.HttpProxy({ url : 'formDemo.do?reqCode=queryAreaDatas'// 后台查询获取可选项 }), reader : new Ext.data.JsonReader({}, [{ name : 'value' }, { name : 'text' }]), listeners : { load : function(pStore, option) {// 加载时将每一项record的text翻译为简拼 pStore.each(function(record) { var text = record.get('text'); var code = Pinyin.GetJP(text);// 获取汉语,调用函数得到对应的简拼 record.set('code', code); }) } } }); testStore.load();
var testCombo = new Ext.form.ComboBox({ hiddenName : 'testCombo', fieldLabel : '行政区域', emptyText : '请选择...', triggerAction : 'all', store : testStore, displayField : 'text', valueField : 'value', loadingText : '正在加载数据...', mode : 'local', forceSelection : true, typeAhead : true, resizable : true, editable : true, anchor : '100%', listeners : { focus : { fn : function(e) { e.expand(); this.doQuery(this.allQuery, true); }, buffer : 200 }, beforequery : function(e) { // 在文本框内输入拼音时,根据store内code进行过滤,在下拉列表中只显示拼音匹配的选项 var combo = e.combo; if (!e.forceAll) { var input = e.query; var regExp = new RegExp("^" + input + ".*", "i"); combo.store.filterBy(function(record, id) { var text = record.get('code'); return regExp.test(text); }); combo.expand(); combo.select(0, true);// 将光标默认指向下拉列表的第一项,这样在取到合适的选项时,通过上下方向键和回车就可以选中需要的结果 return false; } } } });
执行效果如下图:
标签:
原文地址:http://blog.csdn.net/aknifing/article/details/43669851