jquery 封装select 远程搜索,太难了,以前jquery时代没有相关的需求吗

由于jquery时代过去太久,现在手里刚好有个项目用到jquery和bootstrap等一系列技术,接了一个需求,页面上需要一个支持远程搜索的组件,原本以为项目有现成拿过来用的组件(碰坑),漏算了。
此项目里下拉框要不是固定选项,要不就是一次性返回的下拉数据,搜索也是在本地做的。看来只能和jquery一起折腾了。首先,规划了下要的组件需要满足那些功能,然后针对性的去网上找了下相关的资料,突然感觉只能从零开始了.............
经过漫长的时间,网上找到了一个支持远程搜索的select下拉组件,现有的功能满足了一大半,用vue封装的一些组件用久了,再来用这些,确实有些不习惯。
业务场景:
1.在表单页面里需要个下拉框支持远程搜索(不要求分页)
2.不需要考虑下拉选项数据几个或者是固定的情况
3.禁止文本框输入一些值生效,只能通过下拉选项回写值,需要有一个按钮一键清除文本框的内容
4.为了提高些用户体验,请求数据时,在文本框右侧显示loading状态
5.不需要考虑父级别overflow:hidden 挡住元素,不需要考虑在一个页面上多个滚动条出现情况下使用 的复杂问题
6.用户搜索没有返回数据,需要显示无数据提示
7.用户操作聚焦文本框,就请求数据,默认加载20条
8.不需要多选
基于以上需求,在网上找的一个组件基础上 优化了以下几点:
1.增加了防抖,防止请求条件和请求结果没有对应
2.增加了focus直接请求数据
3.处理异常和没有数据的情况处理
4.添加缓存函数 若查询name+url相同,直接返回缓存的数据
5.文本框显示进度条
6.增加清除数据按钮
也修复了一些问题,列出如下,供参考以后免踩坑:
1.按键事件需要处理,点击空白处判断问题,这里我做了个判断就是focus状态才显示然后请求数据
2.没有数据的情况,弹框有显示边框

// 先给 元素 绑定了三个事件 blur keyup focus
 this.$element.on('blur', $.proxy(this.blur, this))
                .on('keyup', $.proxy(this.keyup, this))
                .on('focus', $.proxy(this.keyup, this));
//往元素增加 loading元素和 clear元素
      this.$element.after("<div class='clear' id='" + this.clearID.slice(1)+ "' \"><i class=\"ace-icon fa fa-remove I-pointers\"></i></div>");
            this.$element.after("<div class=\"loading\"><span></span></div>");
// 给下拉选项增加click事件
            this.$element.parent('.remote_duyiwuer_wrapper').on('click',this.ulID, $.proxy(this.click, this));
// 给clear按钮绑定清除内容方法
            this.$element.parent('.remote_duyiwuer_wrapper').on('click',this.clearID, $.proxy(this.clear, this));
// 核心内容看 请求处理
function () {
            console.log('ajaxer')
            var that = this,
                query = that.$element.val().trim();
           if(this.ulBlur) return
            const hitData =  this.cacheData[query+that.ajax.url];
            if (hitData) {
                console.log('命中数据')
                return hitData;
            }
            that.$element.attr('data-loading',"1");
            that.uuid += 1;
            // 每个方法调用的内部变量 fetchId
            const fetchUid = that.uuid;
            that.query = query;
            if (that.ajax.timerId) {
                clearTimeout(that.ajax.timerId);
                that.ajax.timerId = null;
            }
            that.ajax.timerId = setTimeout(function() {
                var params = { name : query };
                $.post(that.ajax.url, params, function(data){
                    console.log(data)
                    if (fetchUid !== that.uuid) {
                        console.log('被拦截的一些请求组',query)
                        return;
                    }
                    that.$element.attr('data-loading',"");
                    console.log('通过的一些请求组',query)
                    const response=that.render(data.list)
                    that.cacheData[query]=response
                    // return response
                }).error(function () {
                    that.render([])
                    that.$element.attr('data-loading',"");
                });
                that.ajax.timerId = null;
            }, that.ajax.timeout);
            return that;
        }
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容