修改easyui combobox源码,实现模糊搜索

来源:互联网 发布:程序员思维修炼过程 编辑:程序博客网 时间:2024/05/08 06:43

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;}
模糊搜索,不区分大小写。

这样就改好了~试试看效果吧~


0 0
原创粉丝点击