给下拉框添加模糊查询功能

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

1.定义select标签。(select标签必须有一个position为relative的父标签,该父标签下除了select不要加其他内容)

2.引入fuzzyQuery.js


(
    function(){
        /*
         select 标签方法
         作用:模糊查询
         需要给select标签加一个 positioin:relative的div
         */
        $.fn.fuzzyQuery = function(options){

            var default_option_div_style = {
                "line-height":"25px",
                "font-size":"12px",
                "max-height":"200px",
                "z-index":"1999"
            }

            var _this = $(this);
            var _class = _this.attr('class');
            //获取select在屏幕中的坐标
            var _top = $(this).offset().top;
            var _left = $(this).offset().left;
            //获取select宽高
            var _width = $(this).outerWidth();
            var _paddingLeft = ($(this).innerWidth()-$(this).width())/2;
            var _height = $(this).height();
            //创建合适大小的div覆盖select
            var _cover = $('
'); _cover.css({"width":_width,"height":_height,"top":0,"left":0}); $(this).parent().children('#fuzzy-query-cover').remove(); _cover.appendTo($(this).parent()); //在覆盖cover中构建input var _container = $('
'); _container.appendTo(_cover); //创建input text var _input = $(''); _input.css({"top":"0px","left":"0px","width":_width}); _input.val($(this).find('option:selected').text()); _input.appendTo(_container); _input.addClass(_class); //创建下拉框 var _optionDiv = $('
'); _optionDiv.css({"min-width":'100%',"top:":-_height,"left":"0px"}); _optionDiv.appendTo(_container); var _optionUl = $('
    '); _optionUl.css(default_option_div_style); _optionUl.appendTo(_optionDiv); var _close = $(''); _close.appendTo(_optionDiv); _close.find('a').bind('click',function(){ _optionDiv.css('display','none'); }); //########################################################### //将select中的数据填入input var data = []; var _options = $(this).find('option'); _options.each(function(index){ var _v = $(this).attr('value'); var _k = $(this).text(); var kv = {"name":_k,"value":_v}; data[index]=kv; }); //input获得焦点事件 _input.bind('focus',function(){ var key = $(this).val(); fillData(_optionUl,data,null); }); //input失去焦点 //input改变事件 _input.bind('input propertychange',function(){ var key = $(this).val(); fillData(_optionUl,data,key); }); //################################## //反显 function fillData(target,data,key){ target.children('li').remove(); var data = filter(data,key); for(var i=0;i'); _li.text(data[i]['name']); _li.attr('value',data[i]['value']); _li.css({"padding-left":_paddingLeft}); _li.appendTo(target); _li.bind('mouseover',function(){ $(this).css({"background-color": "#167fc9"}); }); _li.bind('mouseout',function(){ $(this).css({"background-color": "white"}); }); _li.bind('click',function(){ var _v = $(this).attr('value'); var _n = $(this).text(); _this.val(_v); _this.trigger('change'); _input.val(_n); _optionDiv.css('display','none'); }); } if(data.length>0){ _optionDiv.css('display','block'); } } //根据模糊查询过滤 function filter(data,key){ var newData = []; if('undefined'==data||null==data){ return newData; } if(null==key||''==key){ return data; } var j = 0; for(var i=0;i=0){ newData[j]=data[i]; j++; } } return newData; } } } )(jQuery)

    3.调用模糊查询方法。

     

    转载于:https://my.oschina.net/mlh3823/blog/1204285

    你可能感兴趣的:(给下拉框添加模糊查询功能)