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

easyui combobox搜索功能太差劲了,接下来动手改进一下:

  1. /** 
  2.   
  3.      * 数据过滤(本地)或者请求(远程) 
  4.   
  5.      * parmas[target] 承载combobox的DOM 
  6.   
  7.      * parmas[q] 用户输入的文本 
  8.   
  9.      */  
  10.    
  11.     function doQuery(target, q) {  
  12.    
  13.         var opts = $.data(target, "combobox").options;  
  14.    
  15.         //设置values?谁会输入valueField呢?q为text,把text作为value带进去是什么意思呢?  
  16.    
  17.         //个人觉得这个地方不合理  
  18.    
  19.         if (opts.multiple && !q) {  
  20.    
  21.             setValues(target, [], true);  
  22.    
  23.         } else {  
  24.    
  25.             setValues(target, [q], true);  
  26.    
  27.         }  
  28.    
  29.         if (opts.mode == "remote") {//如果为remote模式,则请求远程数据  
  30.    
  31.             request(target, null, {  
  32.    
  33.                         q : q  
  34.    
  35.                     }, true);  
  36.    
  37.         } else {//本地模式  
  38.    
  39.             var panel = $(target).combo("panel");  
  40.    
  41.             //隐藏所有下拉选项  
  42.    
  43.             panel.find("div.combobox-item").hide();  
  44.    
  45.             var data = $.data(target, "combobox").data;  
  46.    
  47.             for (var i = 0; i < data.length; i++) {  
  48.    
  49.                 //如果根据text过滤到(过滤规则为:包含用户输入值即匹配)匹配选项,则显示、设置选项。  
  50.    
  51.                 if (opts.filter.call(target, q, data[i])) {  
  52.    
  53.                     var v = data[i][opts.valueField];  
  54.    
  55.                     var s = data[i][opts.textField];  
  56.    
  57.                     var item = panel.find("div.combobox-item[value=\"" + v + "\"]");  
  58.    
  59.                     //显示item  
  60.    
  61.                     item.show();  
  62.    
  63.                     if (s == q) {//完全匹配(即完全等于)  
  64.    
  65.                         //设置values  
  66.    
  67.                         setValues(target, [v], true);  
  68.    
  69.                         //添加选中样式  
  70.    
  71.                         item.addClass("combobox-item-selected");  
  72.    
  73.                     }  
  74.    
  75.                 }  
  76.    
  77.             }  
  78.    
  79.         }  
  80.    
  81.     };  

原来的匹配方式:

这样必须要开头完全匹配,实在不好用。

  1. //return row[opts.textField].indexOf(q)==0;//  
改进升级版:

  1. filter:function(q,row){  
  2.       
  3. var opts=$(this).combobox("options");  
  4. //return row[opts.textField].indexOf(q)>-1;  
  5. return row[opts.textField].toLowerCase().indexOf(q.toLowerCase())>-1;  
  6. }  
模糊搜索,不区分大小写。

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

转载http://blog.csdn.net/dreamerframework/article/details/17319433
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值