说在开头 

前面博客写了一个模拟select的组件,文中还说到了一个问题;那天晚上想了一个方案第二天试了一下,是可以的;前几天一直赶进度,乘着周末分享出来。


重点,重点

自己仔细分享了出问题的原因有2个

1.缺少一个组件(组件被初始化1次,就需要标示一下)的唯一标示;

2.没有在子类中重写handlers,即实例化;导致on,fire时,this指针指向出错;

下面分别就上面提出解决方案。

缺少唯一标示:

这个问题让我自己想到以前解决ajax缓存时的方案,即在请求的url中加一个时间戳。

所以,通过时间戳给每一次组件加一个时间戳作为自己的唯一id;

重点代码如下:

  function Uselect() {if(this instanceof Uselect) {this.config = {container:null,//组件的父容器skin:null,//皮肤readOnly: true,//输入框是否只读maxCount:5,//最大展示数量,超过时,出现滚动条selectHandler:null,//选中回调dataType:0,//数据类型0,1data:"",//数据,如果自定义拼装,请使用li标签top:15,//下拉距顶位置,主要用于微调width:120,//input,以及下拉的宽度liHeight:30//下拉li的高度};this.isShow = false;//局部变量,仅限组件内部使用this.id = new Date().getTime(); } else {return new Uselect();}

组件被new一次,就有一个唯一的id,而且不会重复;

然后就是widget类绑定和执行自定义事件时,通过id进行区分

重点代码如下:

    //绑定自定义事件on:function(type,handler) {if ("undefined" === typeof this.handlers[type + this.id]) {this.handlers[type + this.id] = [];}this.handlers[type + this.id].push(handler);return this;},//依次触发自定义事件fire:function(type, data) {if ("[object Array]" === Object.prototype.toString.call(this.handlers[type + this.id])){var handlers = this.handlers[type + this.id];var len = handlers.length;for (var i = 0; i < len; i++) {handlers[i](data);}return this;}}

给每一个绑定事件的type这样处理一下:type + this.id

这样相同事件在on绑定时的事件type实际上时,type + this.id,永远不会重复;

同理,执行自定义事件也是按照type + this.id的事件类型执行!

当然,这里的type + this.id只是简单的拼唯一字符串的方式,你也可以通过type+"-"+ this.id,或者type+"_"+ this.id等等。

重写handlers

这个比较好理解,当我们在uselect构造函数中重写this.handlers后,name当注册和执行事件时,this就指向当前的对象,handlers就实例化。代码比较简单,在构造函数重写handlers就可以了;

代码如下:

  function Uselect() {if(this instanceof Uselect) {this.config = {container:null,//组件的父容器skin:null,//皮肤readOnly: true,//输入框是否只读maxCount:5,//最大展示数量,超过时,出现滚动条selectHandler:null,//选中回调dataType:0,//数据类型0,1data:"",//数据,如果自定义拼装,请使用li标签top:15,//下拉距顶位置,主要用于微调width:120,//input,以及下拉的宽度liHeight:30//下拉li的高度};this.isShow = false;//局部变量,仅限组件内部使用// this.id = new Date().getTime(); this.handlers = {};} else {return new Uselect();}}

闲扯

周末,公司真安静;一个人在公司写写博客,听听歌,真好。

转载于:https://blog.51cto.com/shuizhongyue/1698591

select 组件-bug解决方案相关推荐

  1. 无界微前端(wujie):element-ui 弹框内使用select组件,弹出框位置异常解决方案

    element-ui 弹框内使用select组件,弹出框位置异常解决方案 只需三步,第一步: 将子应用将 body 设置为 position: relative  第二步: 在子应用的html上设置个 ...

  2. antd Select组件 和 Dropdown组件 踩坑·记

    目录 一.踩坑记 1.Select 组件需要显示 value 但传递给后台的是 key 2.Select 组件或 Dropdown 组件下拉框随页面上下滑动的问题 3.Select 组件滑动下拉框数据 ...

  3. jQuery weui Select组件显示指定值

    jQuery weui有个支持单选或者多选的select弹出层,默认他是这样的 第2部分选择什么值,第1部分就显示什么值,一般的场景支持是没问题了,但本次开发碰到了一个问题. 需求描述: 职业名称后面 ...

  4. (Select)解决:Element-ui 中的 Select 组件用(深度)选择器修改默认样式不生效的问题及如何使用 popper-append-to-body=“false“ 属性

    1.存在修改默认样式不生效问题的展示: A.问题一:虽然通过深度选择器修改了下拉框的背景等样式问题却没有展示: B.问题二:渲染后的 dom 元素并不在 #app 元素内部: // 发现:修改下拉框默 ...

  5. vue中使用baidushare分享到微信无法显示bug解决方案

    vue中使用baidushare分享到微信无法显示bug解决方案 参考文章: (1)vue中使用baidushare分享到微信无法显示bug解决方案 (2)https://www.cnblogs.co ...

  6. elementui select组件选中后无法自动刷新更新值渲染到页面中

    2019独角兽企业重金招聘Python工程师标准>>> elementui select更改选中值后,无法渲染到页面中? 在select组件中添加了@visible-change=& ...

  7. 组件三层_Angular 练级之旅(8)-Zorro Select组件的实现和进阶

    很久没写相关的文章,正好前两天把抄来的Select组件重写了一下,简化了一些逻辑. 先看下zorro 中select组件的一个目录结构 zorro将select组件分成了 三大块 Input / 选择 ...

  8. kpc v0.8.3发布,跨框架的组件库解决方案

    开发四年只会写业务代码,分布式高并发都不会还做程序员? >>>   kpc是金山云前端团队推出的跨框架的组件库解决方案,目前支持金山云内部框架Intact,以及流行的Vue/Reac ...

  9. Ext1.X的CheckboxSelectionModel默认全选之后不允许编辑的BUG解决方案

    Ext1.X的CheckboxSelectionModel默认全选之后不允许编辑的BUG解决方案,ext 的CheckboxSelectionModel在后台默认选中之后,前台就不允许编辑的bug是存 ...

最新文章

  1. android fragment activity 交互,Android基础之Fragment与Activity交互详解
  2. 笑了,面试官问我知不知道异步编程的Future。
  3. rhel 6.4 + udev + 11.2.0.3 + asm 单点安装
  4. HTML基础学习(一)—HTML
  5. 百度地图API使用之实现定位
  6. 98. Leetcode 518. 零钱兑换 II (动态规划-完全背包)
  7. c# gerber文件读取_懒猪编程实例六:Visual C# 实现外部文件的读取和写入
  8. 定义任务打印gradle下载的jar包位置
  9. windows下oracle数据库自动备份脚本
  10. 【转】UML基础: 第 2 部分 - 对象图 (Object Diagram)
  11. Haar特征与积分图—概念解析
  12. Python性能分析的学习笔记
  13. 如何在双显示器设置中将 Mac Dock 保持在一个屏幕上?
  14. Python 微信自动化工具开发系列05_根据用户信息自动回复(2022年10月可用)
  15. Android PreferenceScreen
  16. GraphPB:Graphical representations of prosody boundary in speech synthesis论文阅读
  17. 用计算机写高中数学程序框图,画“程序框图”,高中数学最实用基本技能之一...
  18. 激光雷达发射的激光属于哪个范围???和毫米波波长相比如何???
  19. PTA 用java编写 7-4 房产税费计算2022
  20. 二进制部署高可用k8s集群

热门文章

  1. 转换到bot模式失败_《认知觉醒》:为什么越“努力”,会越失败
  2. c语言删除一个字符指令,【C语言】实现一个基于命令行的文本编辑器
  3. Postman中对报文进行AES+Base64加密请求
  4. feign使用_Feign:介绍与使用
  5. 电脑小白用Linux,linux小白说说用linux的感受
  6. mysql主从安装配置_mysql主从安装配置
  7. python构建知识库_使用Mediawiki构建个人知识库
  8. python外星人入侵游戏run_game报错_《python编程从入门到实践》书中的外星人入侵小游戏报错...
  9. 慎用ArrayList的contains方法,使用HashSet的contains方法代替
  10. Java讲课笔记17:Lambda表达式