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");
}
}
}
}
};
将jquery.easyui.min.js的源碼手動修改一下
return row[opts.textField].indexOf(q)>-1;//将從頭位置比對改為任意比對
},formatter:function(row){
var opts=$(this).combobox("options");
return row[opts.textField];
},loader:function(_7c9,_7ca,_7cb){
var opts=$(this).combobox("options");
if(!opts.url){
return false;
}