jquery.autoComplete.js 插件的自定义搜索规则

1.定义了一个本地数据JS文件时,格式为JSON式的数组。如下:
    var stockInfoJson = [
    { name: "深发展A", code: "000001",spell:"sfza" },
    { name: "万科A", code: "000002",spell:"wka"},
    { name: "ST 国 农", code: "000004",spell:"stgn" },
    { name: "世纪星源", code: "000005",spell:"sjxy" },
    { name: "深振业A", code: "000006" ,spell:"szya"},
    { name: "ST 达 声", code: "000007" ,spell:"stds"},
    { name: "ST宝利来", code: "000008" ,spell:"stbll"},
    { name: "中国宝安", code: "000009" ,spell:"zgba"},
    { name: "S ST华新", code: "000010" ,spell:"ssthx"},
    { name: "山航B", code: "200152" ,spell:"shb"},
    { name: "*ST帝贤B", code: "200160" ,spell:"stdxb"},
    { name: "雷伊B", code: "200168" ,spell:"lyb"},
    { name: "宝石B", code: "200413",spell:"bsb" },
    { name: "小天鹅B", code: "200418" ,spell:"xteb"},
    { name: "粤高速B", code: "200429" ,spell:"agsb"},
    { name: "宁通信B", code: "200468" ,spell:"ltxb"},
    { name: "晨鸣B", code: "200488" ,spell:"cmb"},
    { name: "珠江B", code: "200505" ,spell:"zjb"},
    { name: "闽灿坤B", code: "200512" ,spell:"mskb"},
    { name: "华电国际", code: "600027" ,spell:"hdgj"}
];
 
2.现在希望用户输入的内容在code及spell属性中进行匹配。但默认的jquery.autocomplete.js插件,当用户输入内容时总是去匹配name.
通过查看源码没有发现有对此需求进行支持的相关属性,这点倒不方便了!所以决定对jquery.autocomplete.js进行修改,使其支持自定义的匹配模式。
首先在429行添加一个事件
       reasultSearch: null , // add by fengyan 添加一个自定义查询结果的事件属性

3.在$.Autocompleter.Cache中添加一个缓存数据变量450行
      var allData = new Array(); // add by fengyan 数组变量 缓存所有数据
 
4.在populate()方法中添加511行添加
     allData.push(row);//add by fengyan 将每行数据存放刚才定义的数组变量中
 
5.然后再在load: function(q)方法中568行添加一个判断
 
    //add by fengyan 调用用户自定义查询方法
else if(typeof(options.reasultSearch)=="function")
{
    var csub = [];
    $.each(allData, function(i, row) {
        var ms = options.reasultSearch(row,q);
        if(ms!=null && ms!=false)
        {
            csub.push(ms);
        }
    });
    return csub;           
}
 
6.然后前台调用的时候可以使用resultSearch属性进行扩展我们自己想要的查询方式
 
$(function(){
    $("#suggest1").autocomplete(stockInfoJson, {
        minChars: 1,
        matchCase:false,//不区分大小写
        autoFill: false,
        max: 10,
        formatItem: function(row, i, max,term) {
            var v = $("#suggest1").val();       
            return  row.name + " (" + row.code + ")";
            if(row.code.indexOf(v) == 0 || row.spell.indexOf(v)==0)
            {
                return  row.name + " (" + row.code + ")";
            }
            else
                return false;
        },
        formatMatch: function(row, i, max) {
            return row.name + " (" + row.code+")";
        },
        formatResult: function(row) {
            return row.code;
        },
        reasultSearch:function(row,v)//本场数据自定义查询语法 注意这是我自己新加的事件
        {
            //自定义在code或spell中匹配
            if(row.data.code.indexOf(v) == 0 || row.data.spell.indexOf(v) == 0)
            {
                return row;
            }
            else
                return false;           
        }
    });
});
 


运行效果如图

扩展方法本文已作详细说明
如有需要的源码的朋友可以访问
源码下载:
下载代码 download local
 
 
 
 
 
 
 
 
插件使用配置(config)还是很灵活的,当然也是弊端,配置不当,效果就没了。 使用时候,重要的参数如下(此demo参数配置点击右键看源码): url: 'http://suggest.taobao.com/sug?code=utf-8&extras=1', queryName: 'q', //url?queryName=value,默认为输入框的name属性 jsonp: 'callback', //设置此参数名,将开启jsonp跨域功能(我要调淘宝数据,非跨域不可,淘宝的回调参数名就是callback),否则使用json数据结构 item: 'li', //下拉提示项目单位的选择器,默认一个li是一条提示,与processData写法相关。 processData: function(data){ }//自定义处理返回的数据,该方法可以return一个html字符串或jquery对象,将被写入到提示的下拉层中。 右键查看源码,将看到本demo所编写的processData函数是怎样的,所以这个参数是把如何表现交给你来做了,但别忘了配合 item 参数 getCurrItemValue: function($currItem){ }//定义如何去取得当前提示项目的值并返回值,插件根据此函数获取当前提示项目的值,并填入input中,此方法应根据processData参数来定义。 是的,如果你自定义了processData,这个参数恐怕也需要自定义,默认是获取$currItem.html(),你也可以return $currItem.attr('an attrName'); 右键查看源码,将看到本demo所编写的getCurrItemValue函数是怎样的 textchange: function($input){}, //不同于change事件在失去焦点触发,inchange依赖本插件,只要内容有变化,就会触发,并传入input对象 onselect: function($currItem){} //当选择了下拉的当前项目时执行,并传入当前项目。比如选择了某个提示项目,就提交表单。 sequential: 0, //按着方向键不动是否可以持续选择,默认不可以,设置值可以是任何等价的boolean
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值