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

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

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


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值