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;
}
模糊搜索,不区分大小写。
这样就改好了~试试看效果吧~