easyui combobox搜索功能太差劲了,接下来动手改进一下:
- /**
- * 数据过滤(本地)或者请求(远程)
- * parmas[target] 承载combobox的DOM
- * parmas[q] 用户输入的文本
- */
- function doQuery(target, q) {
- var opts = $.data(target, "combobox").options;
- //设置values?谁会输入valueField呢?q为text,把text作为value带进去是什么意思呢?
- //个人觉得这个地方不合理
- if (opts.multiple && !q) {
- setValues(target, [], true);
- } else {
- setValues(target, [q], true);
- }
- if (opts.mode == "remote") {//如果为remote模式,则请求远程数据
- request(target, null, {
- q : q
- }, true);
- } else {//本地模式
- var panel = $(target).combo("panel");
- //隐藏所有下拉选项
- panel.find("div.combobox-item").hide();
- var data = $.data(target, "combobox").data;
- for (var i = 0; i < data.length; i++) {
- //如果根据text过滤到(过滤规则为:包含用户输入值即匹配)匹配选项,则显示、设置选项。
- if (opts.filter.call(target, q, data[i])) {
- var v = data[i][opts.valueField];
- var s = data[i][opts.textField];
- var item = panel.find("div.combobox-item[value=\"" + v + "\"]");
- //显示item
- item.show();
- if (s == q) {//完全匹配(即完全等于)
- //设置values
- setValues(target, [v], true);
- //添加选中样式
- item.addClass("combobox-item-selected");
- }
- }
- }
- }
- };
原来的匹配方式:
这样必须要开头完全匹配,实在不好用。
- //return row[opts.textField].indexOf(q)==0;//
- filter:function(q,row){
- var opts=$(this).combobox("options");
- //return row[opts.textField].indexOf(q)>-1;
- return row[opts.textField].toLowerCase().indexOf(q.toLowerCase())>-1;
- }
这样就改好了~试试看效果吧~
转载http://blog.youkuaiyun.com/dreamerframework/article/details/17319433